У меня есть несколько хранимых процедур, сделанных с помощью Workbench MySQL. Они отлично работают, когда используют workbench MySQL, чтобы поместить их в тестовую БД.Как вставить/создать хранимые процедуры в mySQL с PHP?
Теперь я готовлю сценарии создания БД для развертывания, и это единственный, который дает мне проблемы. Когда я использую оболочку командной строки/mysql, скрипт отлично работает. Только когда я использую интерфейс mysql (i) PHP для выполнения скрипта - он терпит неудачу. Без комментариев.
Я использую сценарии создания процедур, поскольку MySQL workbench генерирует для меня; то есть, он имеет эту закономерность:
SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @[email protected]@SQL_MODE, SQL_MODE='TRADITIONAL';
в начале сценария, затем повторить для каждой процедуры:
DELIMITER $$
USE `dbname`$$
CREATE PROCEDURE `procname`(IN inputparameters)
BEGIN
... процедура проходит здесь
;
END$$
DELIMITER ;
Этот сценарий отлично работает при запуске из MySQL Workbench. Он также отлично работает, если я пытаюсь сделать то же самое из командной строки mysql. Но я ничего не могу выполнить, выполняя его через интерфейс PHP mysqli (выполняя его с помощью mysqli_multi_query, который отлично подходит для других скриптов, создающих и заполняющих БД). На интерфейсе нет ошибок, никаких результатов (!). Все, что я получаю, это «ложь», и все. код ошибки равен 0, нет сообщения об ошибке.
Это большой WTF для меня, и я надеюсь, что вы можете указать мне в правильном направлении - как я могу исправить это и установить процедуры с PHP?
PS: задан и проверен доступ root/admin (в конце концов, я только что создал БД с тем же соединением, созданными пользователями, вставленными таблицами и т. Д.).
Попробуйте удалить использование 'dbname'. Также попробуйте запустить, используя команду mysqli_query. – Knubo
Я удалил это заявление USE, никакого эффекта. mysqli_query тоже не работает - и в этом случае очевидно, почему: строка содержит несколько операторов, поэтому, если она * корректно выполняет *, она возвращает несколько результатов, которые mysqli_query не обрабатывает. - для других скриптов mysqli_multi_query работает отлично, возвращая одну строку результата для каждого оператора. (пустые строки при успехе, Примечание: 1051 строка в качестве реакции на SHOW WARNINGS; - все, как ожидалось). – foo
Я приближаюсь - не решение, а диагноз. DELIMITER, похоже, реализован на стороне клиента (!). – foo