php - 参数化 PDO 语句 : should trusted, 常量值是否被参数化?

标签 php mysql pdo prepared-statement parameterized-query

SELECT name FROM customers WHERE location = ? AND active = '1'

在此查询中,location 的值将来自不受信任的来源,但 active 的值将始终为 = 1。我正在使用 PDO对于 php/mysql。

我还应该参数化active的值吗?
如果active不是常量,而是来自不断变化且可信的来源,我是否仍然应该参数化?(即为了缓存的好处?)

最佳答案

不,参数化常量值没有任何好处。

参数化的目的是让应用程序数据能够安全重复地与SQL表达式结合。安全部分是防止SQL注入(inject)。重复部分是为了让您可以使用不同的值再次执行准备好的查询,从而可能使 RDBMS 不必重新解析和重新优化查询。

如果您始终在查询中使用相同的常量值,那么这些都不是问题。您不会面临来自硬编码值的 SQL 注入(inject)的风险,并且如果需要,您可以重新执行查询,而无需重新解析。

没有进行参数缓存。如果有的话,使用准备好的语句会使 MySQL 更难缓存结果(即 query cache has limitation on caching results from prepared statements )。但是,一旦您使用准备好的语句,它是否具有一个参数与两个或多个参数并不重要。


我确实想知道为什么你将整数放在引号中。我经常看到这种情况,但我不知道这是如何开始的,也不知道谁认为这是必要的。

关于php - 参数化 PDO 语句 : should trusted, 常量值是否被参数化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17757290/

相关文章:

PHP PDO 准备和执行

关于删除授权的 PHP MYSQL 安全性

php - 字符串比较的行为不同

php - 为什么我的所有文件都没有缓存 apc 操作码?

php - json循环php,带有不带id的数组

php - 在引导模式中将 ajax 成功数据显示为数据表

php - 插入数据错误代码 23000 mysql pdo php

php - MySQL 从 PHP PDO 中的存储过程中检索变量

php - 根据日期选择最近的 5 行

php - 如何使用 PHP 在客户端计算机中启用 javascript?