从PDO预处理语句中获取SQL查询和参数

时间:2012-10-15 13:59:58

标签: php mysql pdo

  

可能重复:
  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,CONSTRAINT fk_accounts_zipcodes1 FOREIGN KEY   (zipcodes_id)引用zipcodesid)ON DELETE NO ACTION ON   更新无行动)
文件名:   /var/www/main/components/com_upload/models/contacts.phpLine:520
时间错误:2012年10月15日星期一,太平洋时间7:11:49

导致错误的SQL:

  

INSERT INTO帐户(id,sites_id,name,address,cities_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(),   “active”,:vertical_markets_id,:priority_id,:roles_id)

1 个答案:

答案 0 :(得分: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