php - 在带有数组的准备语句中进行重复键更新

标签 php mysql

到目前为止我的代码:

$query = 'INSERT INTO articles(id, name, picture, url, origAmount, currAmount, added) VALUES ';

$insertQuery = array();
$insertData = array();

$date = getDate();

foreach ($articles as $article) {
    $insertQuery[] = '(?,?,?,?,?,?,?)';
    $insertData[] = $article->id;
    $insertData[] = $article->name;
    $insertData[] = $article->picture;
    $insertData[] = $article->url;
    $insertData[] = $article->amount;
    $insertData[] = $article->amount;
    $insertData[] = $date['year'] . '-' . $date['mon'] . '-' . $date['mday'];
}

if(!empty($insertQuery)) {          
    $query .= implode(', ', $insertQuery);
    $handle = $this->link->prepare($query);
    $handle->execute($insertData);
}

如果 id 已经存在,我只想更新 currAmount。 我试过了

$insertQuery[] = '(?,?,?,?,?,?,?) ON DUPLICATE KEY UPDATE currAmount = (currAmount)';

给出

'SQLSTATE[42000]: 语法错误或访问冲突:1064 [...] near '('0192801635','The Renaissance A Ve' at line 1'

因此,该行的文字内容虽然在空表中插入得很好,但内容本身并不是问题。

我该怎么做?

编辑:解决了

内爆后,添加

$query .= ' ON DUPLICATE KEY UPDATE currAmount = VALUES(currAmount)';

谢谢大家

最佳答案

... ON DUPLICATE KEY UPDATE currAmount=values(currAmount)

您忘记添加 values 关键字

更新 完整示例:

$insertQuery[] = '(?,?,?,?,?,?,?) 重复 key 更新 currAmount=values(currAmount)';

关于php - 在带有数组的准备语句中进行重复键更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46543881/

相关文章:

MYSQL根据条件选择前4个总和

mysql - 多列高分,高效查询,正确做法

mysql - rmysql返回数据类型

php - 我怎样才能匹配\n\r 与 php 中的 preg_replace

php - MySQL 查询中的按问题分组

php - 如何根据给定时间自动重定向页面?我应该使用 JavaScript 吗?如何?

mysql - 在 mysql 中,NOT EXISTS 函数的性能比 UNION 高得多吗?

php - 来自数据库的 MySQL 数据水平对齐

php - 如何在 PHP 中获取 float 的二进制表示?

mysql - 在 MySQL 中选择与按 Id 增量分组的条件匹配的行数