在 symfony 中使用参数执行 sql 请求时出现语法错误?
Syntax error while executing a sql request with parameters in symfony?
我想我有一个简单的问题,我遵循了 Symfony 4.3 文档,并尝试完全按照他们所做的来执行 SQL 请求,但是在传递参数时出现错误execute 方法,但我在执行相同代码但未将参数传递给请求时没有出现错误。
我尝试了这个并且成功了:
$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());
这是错误:
An exception occurred while executing ' SELECT * FROM question_comment
WHERE question= :question LIMIT :beggining , 3' with params [2, 0]:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an
error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near ''0' , 3' at
line 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();
我得到了这个:
An exception occurred while executing ' SELECT * FROM question_comment
WHERE question=:question LIMIT :beggining , 3' with params [2, null]:
SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
另一种绑定参数的方法是使用这个。
$stmt->bindParam(':question', $question, PDO::PARAM_STR);
$stmt->bindParam(':beginning', $beginning, PDO::PARAM_INT);
或者为了确保您绑定了 $beginning 参数,将其转换为 int。
$stmt->bindValue(':beginning', (int)trim($beginning), PDO::PARAM_INT);
或者如果您想坚持使用现有代码。
$stmt->execute(['question' => $question, 'beggining' => (int)trim($beggining)]);
我想我有一个简单的问题,我遵循了 Symfony 4.3 文档,并尝试完全按照他们所做的来执行 SQL 请求,但是在传递参数时出现错误execute 方法,但我在执行相同代码但未将参数传递给请求时没有出现错误。
我尝试了这个并且成功了:
$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());
这是错误:
An exception occurred while executing ' SELECT * FROM question_comment WHERE question= :question LIMIT :beggining , 3' with params [2, 0]:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''0' , 3' at line 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();
我得到了这个:
An exception occurred while executing ' SELECT * FROM question_comment WHERE question=:question LIMIT :beggining , 3' with params [2, null]:
SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
另一种绑定参数的方法是使用这个。
$stmt->bindParam(':question', $question, PDO::PARAM_STR);
$stmt->bindParam(':beginning', $beginning, PDO::PARAM_INT);
或者为了确保您绑定了 $beginning 参数,将其转换为 int。
$stmt->bindValue(':beginning', (int)trim($beginning), PDO::PARAM_INT);
或者如果您想坚持使用现有代码。
$stmt->execute(['question' => $question, 'beggining' => (int)trim($beggining)]);