【问题标题】:Using PDO Prepared Statement and Incrementing a column value使用 PDO 准备语句并增加列值
【发布时间】:2021-02-23 01:23:02
【问题描述】:

我已阅读此主题:Issues incrementing a field in MySQL/PHP with prepared statements,但没有看到我的问题的答案。

PDOStatement Object
(

    [queryString] => UPDATE user_alerts SET notif = ? + 2 WHERE ( user_id = ? )   

)

$stmt->execute( array( 'notif', '1' ) );

据我所知,这一切都是正确的。

当上面的代码执行时,它设置notif 列等于2,而不管notif 列的值是什么。就好像 SQL 读起来像 SET notif = 2 而不是 SET notif = notif + 2

我无法弄清楚,非常感谢帮助!

【问题讨论】:

    标签: php mysql pdo


    【解决方案1】:
    $sql = 'UPDATE user_alerts SET notif = notif + 2 WHERE ( user_id = :userid )';
    $prepStatement = $pdo->prepare( $sql );
    $prepStatement->execute(array(':userid' => $userid));
    

    您不能将列名绑定到准备好的语句。

    【讨论】:

      【解决方案2】:

      使用参数不仅仅是简单的文本替换。您不能用参数替换列名。 MySQL 将解释您的查询,就好像您编写了以下内容一样:

      UPDATE user_alerts SET notif = 'notif' + 2 WHERE ( user_id = ? ) 
      

      字符串'notif'被转换为零以进行加法。

      试试这个查询:

      UPDATE user_alerts SET notif = notif + 2 WHERE ( user_id = ? )   
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-18
        • 2016-12-30
        • 1970-01-01
        • 2013-04-21
        • 1970-01-01
        相关资源
        最近更新 更多