首页 > 数据库 > mysql教程 > 准备好的语句可以处理数据库标识符和关键字吗?

准备好的语句可以处理数据库标识符和关键字吗?

Linda Hamilton
发布: 2024-11-18 18:46:02
原创
687 人浏览过

Can Prepared Statements Handle Database Identifiers and Keywords?

准备好的语句:它们可以处理标识符和关键字吗?

动态查询利用变量来指定表、字段和搜索值。虽然将变量连接到查询中已被证明是成功的,但使用 PDO 的 bindParam() 或 bindValue() 绑定变量会导致空数组。

为什么不起作用:

PDO 准备好的语句仅允许数据文字的占位符。尝试使用占位符表示标识符(表或字段名称)或关键字将不起作用。

解决方案:

  • 标识符: 要包含表示标识符的变量,请遵循以下步骤规则:

    • 将标识符括在反引号 (`) 中。
    • 通过将变量加倍来转义变量内的反引号(``).
  • 关键字:

    • 根据白名单检查用户提供的关键字。
    • 仅使用白名单中的关键字查询。

示例代码:

// Safely format identifier
$field = "`" . str_replace("`", "``", $field) . "`";
$sql = "SELECT * FROM t ORDER BY $field";

// Whitelist keyword
$dir = $_GET['dir'] == 'DESC' ? 'DESC' : 'ASC';
$sql = "SELECT * FROM t ORDER BY field $dir";
登录后复制

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

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