【发布时间】:2011-06-05 09:17:54
【问题描述】:
我是 PDO 库的新手。我正在使用 mysql 作为我的数据库的开发环境。我可以在使用“?”时使用准备和执行功能来运行我的查询。使用命名占位符时的占位符和 bindParam 方法(例如:“:column”)。
在此之后,我尝试查看 PDO 是否通过添加任何引号来像 mysql_real_escape_string 那样对查询进行任何类型的转义。我正在尝试查看查询的外观,但我得到的只是已传递到 prepare 语句中的语句,而不是将要执行的查询。
我尝试对 $result->execute() 和 $result->fetch() 进行 var_dump,但 execute 语句为我提供了带有占位符的 prepare 语句的 sql,而 fetch 语句为我提供了该查询的结果。
有没有办法查看将要运行的查找查询,或者至少在运行查询之前查看参数的外观??
我希望我的问题很清楚。 :|
【问题讨论】:
-
你多虑了。准备好的语句以 100% 逃避您的输入。如果您需要查看最终查询的样子,则必须设置数据库查询日志。
-
@netcoder Prepared statements 不会转义任何内容(除非在兼容模式下)。并且查询日志中没有新内容
-
@Col。 Shrapnel:嗯,技术上是的,虽然你可以用你想要的方式来表达它。至于“查询日志中没有新内容”,我根本不明白这是什么意思……
-
@netcoder 不,它没有。从技术上或字面上或其他方面。下面有一个关于准备好的语句如何工作的链接,你会发现它非常有启发性。在您仔细学习并尝试从中运行代码之前,请不要发表评论
-
@Col。弹片:这是一个 PDO 问题,是的,PDO 中的准备好的语句会转义输入。在你学会一些外交之前,请不要发表评论。
标签: php mysql pdo sql-injection prepared-statement