【问题标题】:MySQLi prepared statements: insert increment of a valueMySQLi准备好的语句:插入一个值的增量
【发布时间】:2014-08-28 10:15:03
【问题描述】:

是否可以以任何方式插入某个列值的增量?

$stmt->$this->mysqli->prepare('INSERT INTO `users` ( `email`,`date_added`,`playCount`) VALUES ( ?, NOW(), ? )');

$stmt -> bind_param('si',$email, WHAT); // playCount++ somehow ...
$stmt -> execute(); 

我知道我可以使用 UPDATE 来做到这一点,但是我需要先检查用户是否存在,然后只为一列执行 INSERT 和之后的 UPDATE?我认为应该有更好的方法吗?

编辑:更新也不起作用(不会成功准备 - 返回错误:有什么想法可能是错的吗?)

$stmt = $this->mysqli->prepare('UPDATE `users` SET `newsletter` = ?, `date_last` = NOW(),  points=points+?,  WHERE `email` = ?');

(reference)

【问题讨论】:

  • 将 playcount 列设为AUTO_INCREMENT
  • 这不会达到我想要的效果。对于每个创建的用户,它只会将该值增加一。当 UPDATE 被调用时呢?请查看我编辑的问题
  • 您的查询包含语法错误。 WHERE 之前有一个逗号,因此您的更新将失败。您不能使用 INSERTS 添加信息的++ 风格 - 这没有任何意义,您不能增加不存在的内容。这类任务通常通过在列上添加唯一约束来完成,然后使用 ON DUPLICATE KEY UPDATE 方法。

标签: php mysqli insert prepared-statement


【解决方案1】:
"INSERT INTO users ( `email`,`date_added`,`playCount`) 
VALUES ( ?, NOW(), (SELECT MAX(playCount) from users)+1 );"

【讨论】:

    猜你喜欢
    • 2014-03-16
    • 1970-01-01
    • 2016-04-05
    • 2012-12-01
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多