尝试使用以下代码:$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");
- 1 回答
- 0 关注
- 144 浏览
添加回答
举报
0/150
提交
取消