【发布时间】:2020-01-01 04:31:39
【问题描述】:
我猜我有一个简单的问题,我遵循 Symfony 4.3 文档,并尝试完全按照他们所做的来执行 SQL 请求,但是在执行方法中传递参数时出现错误,但我得到了执行相同代码但未向请求传递参数时没有错误。
我试过了,效果很好:
$conn = $this->getDoctrine()->getManager()->getConnection();
$sql = '
SELECT * FROM question_comment WHERE question=2 LIMIT 0, 3';
$stmt = $conn->prepare($sql);
$stmt->execute();
var_dump($stmt->fetchAll());
但这不起作用,我得到一个语法错误:
$question = $request->query->get('question');
$row = $request->query->get('row');
$question = intval($question);
$beggining = intval($row*3);
$conn = $this->getDoctrine()->getManager()->getConnection();
$sql = '
SELECT * FROM question_comment WHERE question=:question LIMIT :beggining , 3';
$stmt = $conn->prepare($sql);
$stmt->execute(['question' => $question, 'beggining' => $beggining]);
var_dump($stmt->fetchAll());
这是错误:
执行 ' SELECT * FROM question_comment 时发生异常 WHERE question= :question LIMIT :beggining , 3' with params [2, 0]:
SQLSTATE[42000]:语法错误或访问冲突:1064 你有一个 SQL 语法错误;检查与您对应的手册 MySQL 服务器版本,在 ''0' , 3' 附近使用正确的语法 第 1 行
Here 是我所遵循的,我确实做了那里的事情,但它不起作用。
我尝试了这个解决方案来绑定我的参数,但它也不起作用:
$sql = '
SELECT * FROM question_comment WHERE question=:question LIMIT :beggining , 3';
$stmt = $conn->prepare($sql);
$stmt->bindParam(':question', $question, \PDO::PARAM_INT);
$stmt->bindParam(':beginning', $beginning, \PDO::PARAM_INT);
$stmt->execute();
我得到了这个:
执行 ' SELECT * FROM question_comment 时发生异常 WHERE question=:question LIMIT :beggining , 3' with params [2, null]:
SQLSTATE[HY093]:参数号无效:参数未定义
【问题讨论】:
-
试试这个 $stmt->execute([':question' => $question, ':beggining' => $beggining]);
-
@metal 没用 :(
-
我相信 symfony 正在使用 PDO,可能想将其更改为 $stmt->bindParam(':question', $question, PDO::PARAM_STR);
-
似乎这是空的 $row = $request->query->get('row');,这个表 question_comment 的列是什么
标签: php mysql sql parameter-passing symfony4