2014-11-08 85 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