Как обновить таблицу MYSQL в PHP с помощью JSON

Я работаю с Jstree. Дерево работает нормально. Я отправляю JSON в файл PHP с помощью JQuery. Это отлично работает.

$("#button3").click(function(){
//json object
var objtree = $("#container").jstree(true).get_json('#', { 'flat' : true });
var fulltree = JSON.stringify(objtree);
var myarray = $.parseJSON(fulltree);
var params = { myarray: myarray };
var paramJSON = JSON.stringify(params);

//sending to php file
$.post('update.php',{ data: paramJSON });

});

Затем в php-файле (update.php) я обновляю таблицу mySQL: удаляя все записи в $ tablename ($ sql1) и вставляя информацию, полученную из JSON ($ sql2). Это отлично работает.

<?php

$connection = mysqli_connect($servername, $user,$password,$database) or die("Error " . mysqli_error($connection));

$test = $_POST["data"];
$obj = json_decode($test, true);
$data = $obj["myarray"];

//first query
$sql1 = "DELETE FROM $tablename";
$connection ->query($sql2);

foreach($data as $val){
//second query
$sql2 = "INSERT INTO $tablename(id,parent,text) VALUES('".$val['id']."', '".$val['parent']."', '".$val['text']."')";
$result = mysqli_query($connection, $sql) or die("Error in Selecting " . mysqli_error($connection));
}

mysqli_close($connection);

?>

Но я хочу не удалять все из таблицы, а затем вставлять их совершенно новыми. Но оператор SQL для обновления старых значений (возможно, с использованием идентификатора?) И вставки новых значений.

Так вроде:

If id exists:
update row
else:
insert new row

Я новичок в PHP и SQL. Поэтому моя проблема — знание синтаксиса PHP для доступа к информации массива JSON. Поэтому, пожалуйста, любой пример будет высоко ценится!

0

Решение

Во-первых, вы будете использовать функцию PHP, чтобы получить все строки, соответствующие данному идентификатору. if это возвращает один, вы будете использовать другую функцию для UPDATEгде ID == valueFromPreviousFunction, else Вы будете вызывать функцию для INSERT новый ряд.

1

Другие решения

    $check = mysqli_query($connection,"SELECT * FROM `your_table_name` WHERE `id`='".$val["id"]."'");
if(mysqli_num_rows($check)==1)
{
//Update the row
$update = mysqli_query($connection,"UPDATE `table_name` SET `parent`='".$val["parent"]."', `text`='".$val["text"]."' WHERE `id`='".$val["id"]."'");
}
else
{
//Insert the row
}
1

Там нет команды, чтобы сделать то, что вы хотите в одной операции.

Вы должны либо получить все идентификаторы заранее и запустить обновление для каждого из них отдельно, либо использовать ЗАМЕНИТЬ В.

Будьте осторожны с REPLACE INTO, однако: если строка, соответствующая первичному / уникальному ключу, существует, она сначала удаляет его, а затем вставляет новый, а не обновляет существующую строку.

0
По вопросам рекламы [email protected]