如何在PHP中有效地检查存在的存储过程

时间:2014-11-08 19:05:19

标签: php stored-procedures mysqli

我正在尝试从我的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
}

2 个答案:

答案 0 :(得分:1)

您可以使用以下查询来确定是否存在过程:

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

如果$row['found']1,则该过程已经存在,如果它0它不存在。

答案 1 :(得分:1)

存储过程可在ROUTINES tableINFORMATION_SCHEMA database中查询。

您可以使用此查询在数据库中查找存储过程名称,假设您的数据库名称为dbname且您的过程名称为procname

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