PHP MySQL PDO :: exec为多命令脚本引发或不引发错误

时间:2011-09-29 14:31:29

标签: php mysql sql pdo

执行多命令脚本(例如,一些CREATE TABLE命令,可能还有一些INSERT命令)时,尤其是PHP的MySQL PDO驱动程序,返回值始终为0(不带任何错误信息)即使脚本包含错误 - 语法或逻辑。

这可以防止您运行长构建脚本,然后检查脚本是否成功执行。如果发生错误,该进程将在脚本失败时终止,但仍然存在0并且没有错误信息。

我已经在这个网站和网上搜索了这个问题的答案,似乎一般的回答是“你无能为力”。我目前的解决方案是运行“验证构建”查询,该查询检查一些数据并评估对此的响应 - 这看起来非常低效。

有没有人遇到过这个问题?如果是这样,您如何确保构建脚本成功执行?

4 个答案:

答案 0 :(得分:1)

感谢大家的回答 - 我没有找到解决方案,而是最终使用了Doctrine,它与数据库迁移很好地结合在一起。

答案 1 :(得分:0)

作为一种解决方法,您可以拆分包含脚本的字符串;并单独执行每个语句?

然后,您可以将任何问题隔离到特定声明中。

在php.net上,PDO :: exec没有提到失败时返回false,但PDO :: query确实没有。

答案 2 :(得分:0)

只需创建一个将运行您的脚本的存储函数,您的函数应该在成功的情况下返回一个值并使用选择而不是执行。这样您就可以知道脚本是否成功。如果命令成功终止,则可以删除安装功能。

答案 3 :(得分:0)

您可以使用以下构造获取每个单独命令的信息:

do
{
    // do something with your current rowset
}
while($pdo->nextRowSet());