php - 在 symfony 中使用参数执行 sql 请求时出现语法错误?

标签 php mysql sql parameter-passing symfony4

我想我有一个简单的问题,我遵循了 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());

这是错误:

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是我所遵循的,我完全做了那里的事情,但它不起作用。

我尝试了这个解决方案来绑定(bind)我的参数,但它也不起作用:

 $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

最佳答案

绑定(bind)参数的另一种方法是使用它。

 $stmt->bindParam(':question', $question, PDO::PARAM_STR); 
 $stmt->bindParam(':beginning', $beginning, PDO::PARAM_INT); 

或者为了确保绑定(bind)了 $beginning 参数,请将其转换为 int。

$stmt->bindValue(':beginning', (int)trim($beginning), PDO::PARAM_INT);

或者如果您想坚持使用现有代码。

$stmt->execute(['question' => $question, 'beggining' => (int)trim($beggining)]);

关于php - 在 symfony 中使用参数执行 sql 请求时出现语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57684057/

相关文章:

php - 页面加载后javascript函数不工作

mysql - where 子句中的 SQL 别名

MySQL Schema_Migrations - 事件记录 - 更新值

sql - postgresql如何使用greatest function获取最大值的列名?

sql - 在 MS Access 2007 中使用 SQL 用户定义函数

php - 在 MySQL(消息系统)中返回多个收件人姓名

php - 显示特定用户的详细信息

sql - 更新包含换行符 '\n' 的文本列

php - TCPDF 错误 : [Image] Unable to get image

mysql - MySQL 查询的 WHERE 条件中的子字符串失败