是否可以并且安全地将MySQL语法用于INSERT INTO SET和ON DUPLICATE KEY UPDATE(具有相同的列集)?

问题描述 投票:0回答:1

我知道INSERT INTO SETON DUPLICATE KEY UPDATE的特定MySQL查询语法如何工作。但是,您可以将它们结合起来吗?并且...可以为$columnSetINSERT部分使用相同的UPDATE字符串(见下文),在其中保留唯一字段吗?

考虑此示例(我在服务器上将php与pdo一起使用):

// Define the query
$columnSet = "id=:id, date=:date, created=:created, modified=:modified, removed=:removed, synced=1, points=:points, comment=:comment";
$insertQuery = "INSERT INTO point_events SET"
               . $columnSet." ON DUPLICATE KEY UPDATE ".$columnSet;

   // Define the data
    $pointData['id'] = 'someuniqueid not auto incremented';
$pointData['created'] = 1234; // a timestamp
$pointData['modified'] = 1234; // a timestamp
$pointData['removed'] = NULL;
$pointData['points'] = 10;
$pointData['comment'] = "A comment";
$pointData['date'] = time();

// Execute the query. pdoModify is custom function that executes the query.
pdoModify($pdoNew, $insertQuery, $oldData); 

我见过的所有帖子都没有结合这两种语法,ON DUPLICATE KEY UPDATE上的所有帖子似乎都建议您在UPDATE之后的字符串中不应该包含(重复)键。因此,这是安全的,还是行为不同/有不良副作用。我特别担心的是,将唯一ID保留在$ columnSet中以进行UPDATE。

php mysql pdo
1个回答
0
投票

我相信您的代码应该可以工作。通常,由于最初会检查重复的id唯一键,因此可以保证在调用ON DUPLICATE KEY子句后它不会保持不变。

© www.soinside.com 2019 - 2024. All rights reserved.