php – 何时*不*使用预准备语句?

我重新设计一个PHP驱动的网站,它使用最小的数据库。原始版本使用“伪准备语句”(执行引用和参数替换的PHP函数),以防止注入攻击和将数据库逻辑与页面逻辑分离。

将这些ad-hoc函数替换为使用PDO和真正准备语句的对象似乎是很自然的,但是在对它们进行读取之后,我不太确定。 PDO仍然是一个好主意,但准备语句的主要卖点之一是能够重用它…我从来不会。这里是我的设置:

>这些语句都很简单。大多数形式是SELECT foo,bar FROM baz WHERE quux =? ORDER BY bar LIMIT 1.批次中最复杂的语句只是三个这样的选择与UNION ALLs连接在一起。
>每个页面命中执行最多一个语句,并执行它只有一次。
>我在一个托管的环境,因此leery通过做任何“压力测试”个人抨击他们的服务器。

考虑到使用准备好的语句将至少增加我做的数据库往返次数,我最好避开它们吗?我可以使用PDO :: MYSQL_ATTR_DIRECT_QUERY来避免多个数据库访问的开销,同时保留参数化和注入防御的好处吗?或者,做准备语句API使用的二进制调用执行非常好,相比执行非准备的查询,我不应该担心吗?

编辑:

感谢所有的好建议,人们。这是一个我希望我可以标记多个答案为“接受” – 许多不同的观点。最终,我必须给他rick他的应有的…没有他的答案,我会幸福下来,完成了完全错误,即使在遵循大家的建议。 🙂

仿真准备语句是!

我想你想要PDO :: ATTR_EMULATE_PREPARES。这会关闭本机数据库准备的语句,但仍然允许查询绑定,以防止sql注入和保持您的SQL整洁。从我的理解,PDO :: MYSQL_ATTR_DIRECT_QUERY完全关闭查询绑定。
http://stackoverflow.com/questions/535464/when-not-to-use-prepared-statements

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:php – 何时*不*使用预准备语句?