Как эффективно проверить хранимую процедуру на наличие в PHP

0

Я пытаюсь создать процедуры из 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
}
Теги:
stored-procedures
mysqli

2 ответа

1
Лучший ответ

Вы можете использовать следующий запрос, чтобы определить, существует ли процедура:

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

Если $row['found'] является 1, то процедура уже существует, если она 0 не существует.

  • 0
    Где находится массив $row ?
  • 1
    Это просто заполнитель для любой переменной, которую вы используете, когда вызываете mysqli_fetch_assoc() из этого запроса.
1

Сохраненные процедуры запрашиваются в таблице ROUTINES базы данных INFORMATION_SCHEMA.

Вы можете использовать этот запрос, чтобы найти имена хранимых процедур в своей базе данных, если ваше имя базы данных является dbname а имя вашей процедуры - procname:

SELECT ROUTINE_NAME
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE="PROCEDURE"
  AND ROUTINE_SCHEMA="dbname"
  AND ROUTINE_NAME="procname"
  • 0
    Это работает со стороны phpMyAdmin, но по какой-то причине происходит сбой каждый раз со стороны PHP.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню