Php 更新(如果存在),否则插入(无重复密钥更新)
我试图编写一个脚本,将API中的数据插入数据库,但如果已经存在,请更新数据。接下来,如果数组中不存在数据,我想从数据库中删除数据。现在我已经很高兴,如果我能让更新生效的话 我已经在谷歌上搜索了两天,想找到解决我问题的方法,但我所做的一切都无济于事。现在我有了第一次插入工作,所以它会将初始调用写入DB,但所有后续调用都不会执行任何操作。不再有更新或插入 在我的例子中,ON DUPLICATE KEY UPDATE选项是不可能的,因为代码中提到的id不是我要插入的表的主键。这段代码只是一个示例,真实的数据库有点复杂,我无法更改表本身Php 更新(如果存在),否则插入(无重复密钥更新),php,mysql,sql,arrays,sql-update,Php,Mysql,Sql,Arrays,Sql Update,我试图编写一个脚本,将API中的数据插入数据库,但如果已经存在,请更新数据。接下来,如果数组中不存在数据,我想从数据库中删除数据。现在我已经很高兴,如果我能让更新生效的话 我已经在谷歌上搜索了两天,想找到解决我问题的方法,但我所做的一切都无济于事。现在我有了第一次插入工作,所以它会将初始调用写入DB,但所有后续调用都不会执行任何操作。不再有更新或插入 在我的例子中,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记录]{
检查DB id是否在API数据中
如果DB id不在API数据中{
从数据库中删除记录
}
否则{
无所事事
}
}
现在真的卡住了:谁能帮我?要用于检查重复性的列不必是表的主键 发件人: 如果指定ON DUPLICATE KEY UPDATE子句,并且要插入的行将导致唯一索引或主键中出现重复值,则会更新旧行 应该在要防止重复的列上创建唯一索引。它不仅使插入的使用成为可能。。。关于重复密钥更新语法,但这也是在数据库中表示需求的正确方法
CREATE UNIQUE INDEX my_index ON mytable(column_1, column_2, ...);
在我的例子中,ON-DUPLICATE-KEY-UPDATE选项是不可能的,因为代码中提到的id不是不需要的主键,它可以是唯一的索引。因为每个ID只需要一个条目,所以它应该有一个唯一的索引。