首页 >数据库 >mysql教程 >PDO 准备语句可以绑定表名和列名或 SQL 关键字吗?

PDO 准备语句可以绑定表名和列名或 SQL 关键字吗?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-24 10:25:12650浏览

Can PDO Prepared Statements Bind Table and Column Names, or SQL Keywords?

PDO 准备语句可以绑定标识符或语法关键字吗?

尝试使用表示表、字段的变量构造动态查询/column 以及要搜索的值,在使用 PDO 准备好的语句时可能会遇到意想不到的困难。具体来说,使用bindParam() 或bindValue() 绑定这些变量可能会导致结果集为空。

要深入研究问题的症结,了解 PDO 占位符被指定用于表示数据文字至关重要。因此,尝试将它们用作标识符(如表名或字段名)或语法关键字(例如“LIKE”)可能会导致错误的行为。

具体来说,PDO 不提供对绑定标识符的固有支持. 这意味着开发人员必须承担自己处理这些标识符的责任。为了确保正确执行,需要遵守严格的规则:

绑定标识符规则:

  1. 将标识符括在反引号内。
  2. 通过加倍转义标识符内的反引号

这些格式规则可以防止语法错误和 SQL 注入漏洞。

绑定语法关键字的规则:

  1. 而关键字格式不可用,白名单至关重要。
  2. 验证动态关键字是否与允许的列表匹配值以防止任意关键字替换。

示例:

考虑以下代码片段,它遵循上述规则:

$allowed = array("name", "price", "qty");
$key = array_search($_GET['field'], $allowed);
$field = $allowed[$key];
$query = "SELECT $field FROM t"; // Value is safe

总之,虽然 PDO 准备好的语句在绑定数据文字方面表现出色,但它们缺乏对绑定标识符或语法关键字的支持。通过认真遵循概述的规则,开发人员可以确保安全、准确地执行利用这些关键组件的动态查询。

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

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