PHP MySQL PDO :: exec вызывает или не выдает ошибку для многокомандных сценариев - PullRequest
2 голосов
/ 29 сентября 2011

При выполнении сценария с несколькими командами (например, несколько команд CREATE TABLE и, возможно, несколько команд INSERT), особенно с драйвером MySQL PDO для PHP, возвращаемое значение всегда равно 0 (без информации об ошибках)даже если скрипт содержит ошибки - синтаксис или логика.

Это не позволяет запустить скрипт длинной сборки и затем проверить, был ли скрипт выполнен успешно или нет.Если происходит ошибка, процесс завершается в тот момент, когда скрипт завершается неудачно, но все еще существует с 0 и без информации об ошибке.

Я искал этот сайт и сеть для ответа на этот вопрос, и кажется,что общий ответ: «Вы ничего не можете с этим поделать».Мое текущее решение состоит в том, чтобы выполнить запрос «проверить сборку», который проверяет некоторые данные и оценивает ответ на них - это кажется ужасно неэффективным.

Кто-нибудь сталкивался с этой проблемой?Если да, то как вы убедились, что скрипт сборки был успешно выполнен?

Ответы [ 4 ]

1 голос
/ 23 января 2012

Спасибо за ответы на все вопросы - я не нашел решения для этого, вместо этого в конечном итоге использовал Doctrine, который хорошо увязан с миграцией базы данных.

0 голосов
/ 19 октября 2011

Просто создайте сохраненную функцию, которая будет запускать ваш скрипт, ваша функция должна вернуть значение в случае успеха и использовать выбор вместо выполнения.Таким образом, вы будете знать, был ли ваш сценарий успешным.Вы можете удалить функцию установки, если команда завершилась успешно.

0 голосов
/ 19 октября 2011

Вы можете получить информацию для каждой отдельной команды, используя такую ​​конструкцию, как:

do
{
    // do something with your current rowset
}
while($pdo->nextRowSet());
0 голосов
/ 19 октября 2011

В качестве обходного пути, не могли бы вы разделить строку, содержащую скрипт;и выполнять каждый оператор по отдельности?

Затем вы можете изолировать любые проблемы вплоть до конкретного оператора.

На php.net PDO :: exec не упоминает возврат false при сбое, но PDO:: query делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...