gpt4 book ai didi

php - 如果存在则更新,否则插入(没有 ON DUPLICATE KEY UPDATE)

转载 作者:行者123 更新时间:2023-11-29 16:16:41 32 4
gpt4 key购买 nike

我正在尝试编写一个脚本来从数据库中的 API 插入数据,但如果它已经存在,请更新数据。接下来,如果数组中不存在数据,我想从数据库中删除数据。 (现在如果我能让更新正常工作就已经很高兴了)

我已经在谷歌上搜索了两天来找到我的问题的解决方案,但我尝试过的方法都没有帮助。现在我第一次插入工作,所以它会将初始调用写入数据库,但所有接下来的调用不会执行任何操作。不再更新或插入。

ON DUPLICATE KEY UPDATE 选项在我的情况下是不可能的,因为我的代码中提到的 id 不是我将插入的表的主键。(此代码只是示例,真实的数据库是有点复杂,我无法更改表格本身)。

$content = file_get_contents($url);
$array = json_decode($content, true);
$sql = array();
$update = array();

foreach($array as $row) {

// Create insert string
$sql[] = '('.$row['userId'].', '.$row['id'].', "'.mysqli_real_escape_string($link, $row['title']).'", "'.mysqli_real_escape_string($link, $row['body']).'")';
// Create update data
$update[] = 'UPDATE TestDB.testTabel SET userId='.$row['userId'].', id='.$row['id'].', title= "'.mysqli_real_escape_string($link, $row['title']).'", body = "'.mysqli_real_escape_string($link, $row['body']).'" WHERE id = '.$row['id']. ';';

$flag = 0;
$query = "SELECT id FROM TestDB.testTabel WHERE id =".$row['id'];
$result = mysqli_query($link, $query);

if(mysqli_num_rows($result) > 0) {
$flag=1;
}
else {
$flag=0;
}
}

if($flag==1) {
echo 'found!';
mysqli_query($link, " ".implode('', $update));
//print ''.implode('', $update);
}

else if ($flag==0) {
echo 'not found!';
mysqli_query($link, "INSERT INTO TestDB.testTabel (userId, id, title, body) VALUES ".implode(',', $sql));
// print 'INSERT INTO TestDB.testTabel (userId, id, title, body) VALUES '.implode(',', $sql);
}
else {
echo 'ERROR!';
}

我希望我的脚本检查每个数组行是否存在,如果存在 --> 更新,否则 --> 插入。

基本上,我想要做什么(以伪代码):

从API获取数据

对于每个 [API 记录] {查询数据库查看ID是否已存在

如果(ID 存在){更新记录}

否则如果(ID不存在)(插入记录}

其他{错误}}

对于每个[数据库记录] {检查DB id是否在API数据中

if(数据库 ID 不在 API 数据中){从数据库中删除记录}

其他{没做什么}}

现在真的很困难:(谁能帮助我?

最佳答案

要用于检查重复性的列不必是表的主键。

来自the MySQL documentation :

If you specify an ON DUPLICATE KEY UPDATE clause and a row to be inserted would cause a duplicate value in a UNIQUE index or PRIMARY KEY, an UPDATE of the old row occurs

您应该在要防止重复的列上创建唯一索引。它不仅可以使用 INSERT ... ON DUPLICATE KEY UPDATE 语法,而且这是在数据库中表示您的要求的正确方法。

CREATE UNIQUE INDEX my_index ON mytable(column_1, column_2, ...);

关于php - 如果存在则更新,否则插入(没有 ON DUPLICATE KEY UPDATE),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54738072/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com