【问题标题】:DELETE FROM articles WHERE article_id = ? LIMIT?从文章中删除 WHERE article_id = ?限制?
【发布时间】:2014-06-11 22:30:17
【问题描述】:

Doctrine2 与 Symfony :

$this->get('database_connection')->executeUpdate("DELETE FROM articles 
        WHERE article_id = :article_id 
        LIMIT :quantity", 
    array(
       'article_id' => 1,
       'quantity'   => 2
));

我得到了错误:

执行“删除文章”时发生异常 在哪里 article_id = ?限制 ?'带参数 [1, 2]: SQLSTATE[42000]:

语法错误或访问冲突:1064 您的 SQL 中有错误 句法;检查与您的 MySQL 服务器版本相对应的手册 在第 3 行的 ''2'' 附近使用正确的语法

如何将参数传递给 LIMIT 子句?

我不喜欢使用bindValue 函数,而是使用executeUpdate 函数。

【问题讨论】:

  • 也许我不明白您的数据库是如何设置的,但文章 ID 不应该是唯一编号吗?如果是这样,你真的需要极限吗?
  • article_id 不是唯一的。所以是的,我需要限制。
  • 如果您打算删除特定数量的行,那么在日期列上使用某种形式的排序不是明智之举吗?

标签: php mysql symfony doctrine-orm


【解决方案1】:

问题在于 executeUpdate 不像 setParameter 不会自动推断您设置为值的类型,并将所有参数威胁为字符串。因此,您应该将参数显式设置为整数。

$this->get('database_connection')->executeUpdate("DELETE FROM articles 
        WHERE article_id = :article_id 
        LIMIT :quantity", 
    array(
       'article_id' => 1,
       'quantity'   => 2)
    array(
        \PDO::PARAM_INT,
        \PDO::PARAM_INT
    )
);  

【讨论】:

    【解决方案2】:

    您仍然可以使用以下语法执行更新,这会将第一个值插入文章,然后将第二个值插入限制。未经测试,但应该可以工作

    $this->get('database_connection')->executeUpdate("DELETE FROM articles 
            WHERE article_id = ?
            LIMIT ?, 
        array(1,2)
    );
    

    【讨论】:

    • “未测试”是一个好兆头,表明这不起作用。该代码甚至会产生语法错误。请在您的答案中添加一些解释,以便其他人可以从中学习
    猜你喜欢
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2014-04-26
    • 2014-07-31
    相关资源
    最近更新 更多