Я пытаюсь написать скрипт для вставки данных из API в базу данных, но если он уже существует, обновите данные.Кроме того, я хочу удалить данные из базы данных, если данные не существуют в массиве.(На данный момент уже рад, если бы я мог просто запустить обновление)
Я уже два дня гуглю, чтобы найти решение своей проблемы, но ничего, что я пробовал, не помогло.Пока у меня работает первый раз вставка, поэтому он запишет начальный вызов в БД, но все последующие вызовы ничего не делают.Больше никаких обновлений или вставок.
Параметр ON DUPLICATE KEY UPDATE в моем случае невозможен, поскольку идентификатор, указанный в моем коде, не является первичным ключом таблицы, в которую я буду вставлять. (Этот кодэто только пример, реальная база данных немного сложнее, и я не могу изменить сами таблицы).
$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!';
}
Я бы хотел, чтобы мой скрипт проверял каждую строку массива, если она существует, если да-> update, else -> insert.
Итак, в общем, что я хочу сделать (в псевдокоде):
Получить данные из API
для каждого[Запись API] {Запросите базу данных, чтобы узнать, существует ли уже ID
if (ID существует) {update record}
else if (ID не существует) (вставьте запись}
else {error}}
для каждой [записи БД] {проверить, находится ли идентификатор БД в данных API
if (идентификатор БД не в данных API) {Удалить запись из БД}
else {Ничего не делать}}
Действительно застрял сейчас :( Кто может мне помочь?