nem*_*zny 7 php mysql pdo prepared-statement
我正在考虑使用InnoDB(现在的mysql_query和MyISAM)为我的PDO和事务重写一些开源应用程序.
我的问题是:哪些案例使用准备好的陈述是合理的?
因为我正在阅读的所有地方(即使在这里的许多帖子中)都说明了我应该每次都使用预备语句,因为1.安全性和性能.甚至PHP手册也建议使用预处理语句,而不是提及escape-thing.
你不能否认安全机制.但是想到它一遍又一遍地想到每次都必须准备语句然后再使用一次......这没有意义.虽然必须在单个语句中插入1000次一些变量,但这很有意义,但很明显.但这不是普通的电子商店或董事会的基础.
那么如何克服这个呢?我可以在整个应用程序范围内准备我的陈述并具体命名吗?我可以准备几个不同的陈述并按名称使用它们吗?因为这是我想到的唯一合理的解决方案(除了1000x之外).
我发现有一个名为$ pdo-> quote的mysql_real_escape以及单个查询的目的.为什么不用这个呢?为什么要打扰准备?
你觉得这篇优秀的文章怎么样? http://blog.ulf-wendel.de/2008/pdo_mysqlnd-prepared-statements-again/
您是否同意准备声明所产生的开销?
谢谢
我认为这属于"过早优化"类别.
开销有多大?你测量过吗?它会影响您的服务器性能吗?
可能性不大.
从好的方面来说,你在安全方面有一个不可否认的收益(这应该是任何基于互联网的商店的主要关注点).
在缺点方面,您可能会遇到影响性能的风险.在您提供的链接中,它表明在某些情况下,执行不当的PDO准备会导致性能略低于未准备好的语句.5000次运行的性能差异为0.298秒.
微不足道.当你意识到"未准备好"的查询是在没有输入清理程序的情况下运行时更是如此,这些程序需要在现场环境中使它们安全.如果您不使用准备好的查询,则需要某种形式的输入清理以防止SQL攻击,并且根据其执行方式,您可能需要按摩结果集.
最重要的是,没有明显的性能问题,但有一个显着的安全性好处.因此官方建议使用准备好的陈述.
在你的问题中,你谈到"共同的电子商店".如果有的话,"普通电子商店"将永远不会有足够的流量来担心性能问题.另一方面的安全问题......
我的问题是:哪些案例使用准备好的陈述是合理的?
他们都是.社区公开反对使用mysql_*功能.
注意:建议的替代方案
不鼓励使用此扩展名.相反,应该使用MySQLi或PDO_MySQL扩展.另请参见MySQL:选择API以获取更多信息.
该功能的替代方案包括:
但是想到它一遍又一遍地想到每次都必须准备语句然后再使用一次......这没有意义
你正在买一辆美洲虎的Geo,你抱怨你不喜欢美洲虎,因为你并不总是使用座椅加热器.您不必始终如一地使用库的每个功能来表示它是好的.
我发现有一个名为$ pdo-> quote的mysql_real_escape以及单个查询的目的.为什么不用这个呢?为什么要打扰准备?
如果您使用此函数来构建SQL语句,强烈建议您使用PDO :: prepare()来准备带有绑定参数的SQL语句,而不是使用PDO :: quote()将用户输入插入到SQL语句中.带有绑定参数的预处理语句不仅更易于移植,更方便,不受SQL注入的影响,但执行速度通常比内插查询快得多,因为服务器端和客户端都可以缓存查询的编译形式.资源