为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Doctrine 准备的 SQL 语句中使用 + 或 - 运算符作为参数?

如何在 Doctrine 准备的 SQL 语句中使用 + 或 - 运算符作为参数?

PHP
湖上湖 2021-11-26 17:43:16
尝试使用以下代码:$operator = '+';$conn = $entityManager->getConnection();$stmt = $conn->prepare("    UPDATE articles a SET a.position = a.position :operator 1")->execute([    'operator' => $operator]);在 SQL 语句中UPDATE articles a SET a.position = a.position :operator 1,:operator参数应该替换为'+', 来自先前定义的$operator变量,但实际上它运行失败并返回此错误:执行 'UPDATE 文章 a SET a.position = a.position :operator + 1 with params ["+"] 时发生异常:SQLSTATE[42000]:语法错误或访问冲突:1064 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在 ''+' 1 附近使用的正确语法
查看完整描述

1 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

您不需要绑定您可以完全控制的文字字符。


而绑定是针对实参的。保留字、运算符、数据库标识符……所有这些都没有“绑定”到 SQL 语句中。由于这些永远不会来自用户输入,因此这样做毫无意义。


这只能从现有配置、白名单字符串等安全生成。


只需正常插入连接字符串中的字符:


$operator = '+';

$conn = $entityManager->getConnection();

$stmt = $conn

    ->prepare("UPDATE articles a SET a.position = a.position $operator 1")

    ->execute();

由于您没有参数,因此您可以完全不用准备语句:


$stmt = $conn

    ->executeQuery("UPDATE articles a SET a.position = a.position $operator 1");


查看完整回答
反对 回复 2021-11-26
  • 1 回答
  • 0 关注
  • 130 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信