- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个脚本来从数据库中的 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 数据中){从数据库中删除记录}
其他{没做什么}}
现在真的很困难:(谁能帮助我?
最佳答案
要用于检查重复性的列不必是表的主键。
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/
我是一名优秀的程序员,十分优秀!