微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – PDO如何准备语句在“内部”工作?

准备好的语句很有用,因为准备“模板”来添加数据可以防止sql注入,我的问题是,这怎么可能?

准备好的陈述如何真正起作用?

在我编写查询后,绑定params并执行查询,会发生什么?

我认为params不会在查询中“插入”,在这种情况下,预处理语句的效果会失败…也许它使用特殊的分隔符来检测查询中数据的开始和结束.如果这是对的,它们是什么?

解决方法:

确切的行为取决于.例如,PDO中的MySQL驱动程序可以完成两个完全不同的操作,具体取决于PDO::ATTR_EMULATE_PREPARES attribute的值:

Enables or disables emulation of prepared statements. Some drivers do
not support native prepared statements or have limited support for
them. Use this setting to force PDO to either always emulate prepared
statements (if TRUE), or to try to use native prepared statements (if
FALSE). It will always fall back to emulating the prepared statement
if the driver cannot successfully prepare the current query.

模拟模式就像您描述的那样:PHP一个sql解析器,用实际值替换占位符.唯一的实际好处是代码更清晰,更易于维护.

Native模式基本上在两个独立的通道中将代码和数据发送到服务器.数据可以按原样发送(即使在二进制模式下).这需要客户端和server支持.优点包括安全性,带宽节省以及解析sql代码一次并使用不同数据集运行多次的可能性.实际实施取决于DBMS.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐