我正在考虑使用 InnoDB(现在是 mysql_query 和 MyISAM)将一些开源应用程序重写为 PDO 和事务。
我的问题是:哪些情况下使用准备好的语句是合理的?
因为我读到的所有地方都指出(甚至在这里的许多帖子中),我应该随时随地使用准备好的语句,因为 1. 安全性和 2. 性能。甚至 PHP 手册也建议使用准备好的语句并且不要提及转义。
你不能否认安全机制。但一遍又一遍地思考,我想到每次都必须准备该语句,然后使用它一次......这没有意义。虽然必须在单个语句中插入 1000 次某些变量,但这是有道理的,但很明显。但这并不是常见的网上商店或论坛的基础。
那么如何克服这个问题呢?我可以在整个应用程序范围内准备我的声明并具体命名它们吗?我可以准备几个不同的语句并按名称使用它们吗?因为这是我想到的唯一合理的解决方案(除了 1000x 的事情)。
我发现有一个名为 $pdo->quote 的 mysql_real_escape 也用于单个查询。为什么不使用这个呢?何必费心去准备呢?
您对这篇优秀文章有何看法?http://blog.ulf-wendel.de/2008/pdo_mysqlnd-prepared-statements-again/
您同意准备报表所造成的开销吗?
Thanks
我认为这属于“过早优化”类别。
开销有多大?你测量过吗?它会影响您的服务器性能吗?
很可能事实并非如此。
从好的方面来说,您在安全性方面获得了不可否认的收益(这应该是任何基于互联网的商店的主要关注点)。
不利的一面是,您可能会面临影响性能的风险。在您提供的链接中,它表明在某些情况下,实施不当的 PDO 准备会导致性能比未准备的语句稍低。 5000 次运行的性能差异为 0.298 秒。
微不足道。当您意识到运行“未准备”的查询时更是如此without确保它们在现场环境中安全所需的输入清理例程。如果您不使用准备好的查询,则需要某种形式的输入清理来防止 SQL 攻击,并且根据其完成方式,您可能需要恢复结果集。
最重要的是,不存在重大的性能问题,但具有显着的安全优势。因此官方建议使用准备好的语句。
在你的问题中,你提到了“常见的电子商店”。 “普通eshop”永远不会有足够的流量来担心性能问题(如果有的话)。另一端的安全问题......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)