最稳妥方案是用PDO::ATTR_STATEMENT_CLASS注入继承PDOStatement的自定义类,在execute()中记录this-\>queryString(需启用PDO::ATTR_EMULATE_PREPARES=true才能看到带值SQL),或改用PDO::query()/exec()包装器记录原始SQL。怎么让 PDO 自动记录所有执行的 SQL 语句不能靠 PDOStatement 拦截------它本身不提供钩子,也不暴露原始 SQL。真正能记录的,是 PDO 实例在 prepare/execute 阶段的行为,得从构造和调用链下手。最稳妥的做法:用 PDO::ATTR_STATEMENT_CLASS 注入自定义语句类,把 execute() 和 prepare() 包一层。不是"拦截",而是"替换实现"。必须继承 PDOStatement,否则 PDO 内部会拒绝注册重写 execute() 时,this->queryString 是预处理后的完整 SQL(含参数值,如果用了 emulated prepare)若启用了 PDO::ATTR_EMULATE_PREPARES = true(默认 MySQL),才能拿到带值的 SQL;关掉的话只能拿到带问号的模板日志建议写到 error_log() 或 PSR-3 logger,别直接 echo/print,避免干扰响应PDO::ATTR_STATEMENT_CLASS 的正确写法和常见报错写错类名、没声明构造函数、忘记 extends PDOStatement,都会导致 PDOException: SQLSTATEHY000: General error 或静默失败。正确结构示例:立即学习"PHP免费学习笔记(深入)"; arXiv Xplorer ArXiv 语义搜索引擎,帮您快速轻松的查找,保存和下载arXiv文章。
相关推荐
杨云龙UP13 分钟前
DB2 HADR 主备架构活动日志参数优化操作手册杨女士YRJ16 分钟前
python+pytest+01我是大猴子18 分钟前
MyBatis‑Plus & MyBatis‑Flex 区别鸽芷咕23 分钟前
Mu Editor 鸿蒙 PC 适配全记录:用 Qt 与嵌入式 CPython 重建教学型 Python IDE鸽芷咕25 分钟前
SQL Server数据库迁移避坑指南:老代码不用重写,金仓KES V9R4C019把路铺平了鸽芷咕27 分钟前
MongoDB 鸿蒙 PC 适配全记录:从 Bazel 交叉编译到 HNP 原生数据库服务YangYang9YangYan32 分钟前
2026 校招管理会计 JD 拆解,数据分析能力要求与工具清单微软技术分享40 分钟前
基于 HuggingFace Tokenizers 训练自定义分词器gf13211111 小时前
python_调用远程服务器上的openclawlbb 小魔仙1 小时前
Jupyter Notebook / Lab 深度配置指南:插件 + 内核 + 远程访问 + 容器化部署