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

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

Mary-Kate Olsen
发布: 2024-11-24 10:25:12
原创
610 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板