Я пытаюсь создать процедуры из PHP в моем файле dbConnect.php, который должен предоставить доступ к моей базе данных. Этот файл включен в каждый файл, который нуждается в доступе к базе данных. К сожалению, это означает, что хранимые процедуры, которые уже были созданы, заставляют код выдавать ошибки (потому что он пытается создать хранимые процедуры, которые уже существуют).
Я пробовал искать здесь помощь по хранимым процедурам, а также расчесывать Интернет за все, что поможет с созданием хранимых процедур, но все, что мне удается найти, - это примеры, когда они удаляют хранимую процедуру, если она уже создана. Это кажется огромной тратой, потому что есть некоторые потенциально дорогостоящие методы, которые вызывается каждый раз, когда необходим доступ к базе данных.
Я пытаюсь вместо drop-and-rereate просто проверять существование, а если он не существует, создайте его. Другими словами, я хотел бы сделать что-то вроде следующего:
$storedProcedureExists = $connection->query(/* some query that checks for the existence of that stored procedure */);
if (!$storedProcedureExists)
{
// create the stored procedure here
}
Вы можете использовать следующий запрос, чтобы определить, существует ли процедура:
SELECT COUNT(*) AS found
FROM information_schema.routines
WHERE routine_schema = 'yourDBname'
AND routine_name = 'yourProcedureName'
Если $row['found']
является 1
, то процедура уже существует, если она 0
не существует.
Сохраненные процедуры запрашиваются в таблице ROUTINES базы данных INFORMATION_SCHEMA.
Вы можете использовать этот запрос, чтобы найти имена хранимых процедур в своей базе данных, если ваше имя базы данных является dbname
а имя вашей процедуры - procname
:
SELECT ROUTINE_NAME
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE="PROCEDURE"
AND ROUTINE_SCHEMA="dbname"
AND ROUTINE_NAME="procname"
$row
?mysqli_fetch_assoc()
из этого запроса.