执行多命令脚本(例如,一些CREATE TABLE
命令,可能还有一些INSERT
命令)时,尤其是PHP的MySQL PDO驱动程序,返回值始终为0(不带任何错误信息)即使脚本包含错误 - 语法或逻辑。
这可以防止您运行长构建脚本,然后检查脚本是否成功执行。如果发生错误,该进程将在脚本失败时终止,但仍然存在0并且没有错误信息。
我已经在这个网站和网上搜索了这个问题的答案,似乎一般的回答是“你无能为力”。我目前的解决方案是运行“验证构建”查询,该查询检查一些数据并评估对此的响应 - 这看起来非常低效。
有没有人遇到过这个问题?如果是这样,您如何确保构建脚本成功执行?
答案 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());