2014-11-08 67 views
0

我試圖從PHP中創建程序,在我的dbConnect.php文件中,它提供對我的數據庫的訪問。該文件包含在每個需要數據庫訪問的文件中。不幸的是,這意味着已經創建的存儲過程會導致代碼拋出錯誤(因爲它試圖創建已經存在的存儲過程)。如何在PHP中高效地檢查存在的存儲過程

我試圖在存儲過程中尋找here的幫助,以及梳理互聯網進行任何將與創建存儲過程的幫助,但我能設法找到的例子,如果他們刪除存儲過程已經創建。這似乎是一個巨大的浪費,因爲每次需要數據庫訪問時,都會調用一些潛在的昂貴方法

我想,而不是drop-and-recreate,只是檢查存在,如果它不存在,創建它。換句話說,我想這樣做如下:

$storedProcedureExists = $connection->query(/* some query that checks for the existence of that stored procedure */); 
if (!$storedProcedureExists) 
{ 
    // create the stored procedure here 
} 
+0

我想知道,檢查是否存在查詢數據庫中的存儲過程 – 2014-11-08 19:06:26

+0

爲什麼不建立一次過程作爲設置數據庫的一部分,只是假設它們將始終存在於您的腳本中,就像您假定表已經存在。 – Barmar 2014-11-08 19:13:12

回答

1

您可以使用下面的查詢,以確定是否過程存在:

SELECT COUNT(*) AS found 
FROM information_schema.routines 
WHERE routine_schema = 'yourDBname' 
AND routine_name = 'yourProcedureName' 

如果$row['found']1那麼程序已經存在,如果它是0它不存在。

+0

陣列'$ row'在哪裏? – 2014-11-08 23:26:12

+1

它只是一個佔位符,用於在您從該查詢調用mysqli_fetch_assoc()時使用的任何變量。 – Barmar 2014-11-08 23:28:57

1

存儲過程可在INFORMATION_SCHEMA database的中查詢。

您可以使用該查詢來查找數據庫中的存儲過程的名稱,假設你的數據庫名稱爲dbname和你的程序的名字是procname

SELECT ROUTINE_NAME 
FROM INFORMATION_SCHEMA.ROUTINES 
WHERE ROUTINE_TYPE="PROCEDURE" 
    AND ROUTINE_SCHEMA="dbname" 
    AND ROUTINE_NAME="procname" 
+0

這從phpMyAdmin這方面的工作,但由於某種原因每次從PHP的一面失敗的事情。 – 2014-11-09 03:45:45

相關問題