Intereting Posts

как выполнить команду mysql DELIMITER

У меня огромная проблема (для меня)

Мне нужно выполнить команду MySQL DELIMITER | от PHP, но mysql_query() терпит неудачу с ошибкой. Я обнаружил, что mysql_query() не поддерживает использование DELIMITER , потому что эта команда работает только в консоли MySQL

Но когда я открываю phpMyAdmin, есть возможность изменить DELIMITER на вкладке SQL, и он работает, но я не знаю, как это сделать.

Можно ли изменить разделитель с PHP? Мне нужно это сделать, прежде чем вызывать команду CREATE TRIGGER которая использует несколько ; ,

Вам, вероятно , не нужно менять разделитель.

В CLI необходим разделитель, чтобы указать, где заканчивается оператор SQL, потому что CLI будет продолжать читать и выполнять больше инструкций, пока вы не прекратите его (например, с exit или Control-D). Но то, что он на самом деле читает, это просто поток персонажей; это как-то нужно выяснить, где заканчивается один из утверждений, а следующий начинается. Вот что делает разделитель.

В PHP каждый вызов функции выполняет один оператор. В одном вызове функции не может быть нескольких операторов, поэтому нет необходимости ограничивать их. Заявление представляет собой целую строку. Это относится к старой mysql_query а также к новым mysqli_query и PDO. Конечно, есть mysqli_multi_query если вы действительно хотите передать несколько запросов одной функции.

В случае хранимой процедуры / триггера / функции / и т. Д. Может быть несколько операторов, но это обрабатывается самой MySQL (и всегда;, AFAIK). Что касается PHP, это еще одно утверждение.

Настройка ограничителя, которую вы видите в phpMyAdmin, вероятно, используется для разделения операторов отдельно и, вероятно, выполняется в PHP-коде. Он должен сделать это, потому что он принимает вход пользователя, состоящий из нескольких операторов, но должен передавать только один оператор для вызова функции. (Я не проверял код phpMyAdmin, чтобы полностью убедиться в этом).

Помог ли этот mysql forumpost ?

В основном, он говорит, что вы должны использовать mysqli и multi_query для этого.

Это зависит. Я использую multi_query() MySQLi и оставляю ; как это делается при выполнении фактически созданной процедуры (PHP 5.6 и MySQL 5.6). Я думаю, вам не нужен ограничитель осторожности, оставьте целевой код только тогда, возможно, сработает. Вы можете попытаться запросить SQL только как

 CREATE XXXX BEGIN sth; END 

Просто попробуй.

вам нужна хранимая процедура (процедура, функция), чтобы включить все необходимые запросы,
поэтому в PHP вы можете вызывать упорядоченную процедуру элегантно