首页  >  文章  >  数据库  >  PHP PDO 准备语句中可以绑定标识符和关键字吗?

PHP PDO 准备语句中可以绑定标识符和关键字吗?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-24 11:34:10967浏览

Can I Bind Identifiers and Keywords in PHP PDO Prepared Statements?

PHP PDO 准备语句中的绑定标识符和语法关键字

动态查询通过利用变量定义表名、列来允许灵活的数据库操作名称和搜索值。但是,使用 PDO 准备好的语句绑定标识符(表或字段名称)或语法关键字可能会导致意外结果。

问题:

使用 bindParam() 或 bindValue 时() 绑定表示标识符或语法关键字的变量,返回空数组而不是预期的数据库结果。

解释:

PDO 准备好的语句只能绑定数据文字。因此,尝试绑定标识符或关键字不会得到预期的结果。

解决方案:

要创建安全可靠的动态查询,至关重要:

  • 正确格式化标识符:将标识符括在反引号 (') 中并转义通过将它们加倍 (```) 来在内部添加反引号。
  • 使用白名单: 根据允许值的硬编码列表验证动态标识符,以防止潜在的注入。
  • 对语法关键字应用相同的规则:白名单并验证动态中使用的所有语法关键字查询。

代码示例:

格式化并验证标识符:

$field = "`" . str_replace("`", "``", $field) . "`";

白名单并验证关键字:

$dir = $_GET['dir'] == 'DESC' ? 'DESC' : 'ASC'; 

然后,将清理后的变量包含在准备好的变量中声明:

$stmt = $db->prepare('
    SELECT 
        * 
    FROM 
        ?
    WHERE 
        ? LIKE ?
');
$stmt->bindParam(1, $searchTable);
$stmt->bindParam(2, $searchBy);
$stmt->bindValue(3, '%' . $searchTerm . '%');

通过遵守这些规则,您可以确保动态数据库查询的有效性和安全性。

以上是PHP PDO 准备语句中可以绑定标识符和关键字吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn