【问题标题】:Get SQL Query and parameters from PDO prepared statement [duplicate]从 PDO 准备好的语句中获取 SQL 查询和参数 [重复]
【发布时间】:2012-10-05 12:32:12
【问题描述】:

可能重复:
Retrieve (or simulate) full query from PDO prepared statement
Get Last Executed Query in PHP PDO
PDO Debugging - View Query AFTER Bind?

使用PDOException 类,我可以获得与SQL 错误相关的各种信息。缺少的一部分是导致错误的实际 SQL 查询。这有助于解决完整性约束违规错误。即使带有插入参数的完整查询不可用,准备好的查询以及execute() 传递的数组就足够了,因为我可以重新创建完整的查询。请注意,我目前不使用 bindParam(),而是使用 execute() 传递所有数据。

如何查看导致错误的实际查询?谢谢

错误:

SQLSTATE[23000]:违反完整性约束:1452 无法添加或 更新子行:外键约束失败 (website/accounts, 约束fk_accounts_zipcodes1 外键 (zipcodes_id) 参考文献zipcodes (id) 删除 无操作 更新无操作)
文件名: /var/www/main/components/com_upload/models/contacts.php线路:520
错误时间:2012 年 10 月 15 日星期一,太平洋夏令时间 7:11:49

导致错误的SQL:

INSERT INTO 帐户(id、sites_id、姓名、地址、city_id、 zipcodes_id、电话、传真、date_created、date_modified、record_status、 vertical_markets_id,priority_id,roles_id) VALUES (:id,123,:name,:address,:cities_id,:zipcodes_id,:phone,:fax,NOW(),NOW(), "活跃" ,:vertical_markets_id,:priority_id,:roles_id)

【问题讨论】:

标签: php mysql pdo


【解决方案1】:

确保您获得实际查询的最简单方法是激活mysql 日志并查看您获得的输出。

Windows 上,这可以通过在您的 my.ini 文件中添加两行来完成:

general_log = 1
general_log_file = "C:\path\to\log\mysql.log"

Linux上你需要修改my.cnf文件:

general_log = 1
general_log_file = /path/to/log/mysql.log

【讨论】:

  • 我在my.cnf中添加了以下内容并重新启动了mysql和apache,但是mysql.log仍然不存在。 general_log = 1 general_log_file = /var/log/mysql.log
  • 不知道在Linux 上是如何发生的,但对于我的 Windows 机器,我不得不重新启动 Windows。在apachemysql 重新启动后,它拒绝加载。 + 检查文件/目录权限。
猜你喜欢
  • 2011-01-15
  • 2010-09-17
  • 2012-06-24
  • 1970-01-01
  • 2013-12-28
相关资源
最近更新 更多