【问题标题】:How to Update MYSQL table in PHP using JSON如何使用 JSON 在 PHP 中更新 MYSQL 表
【发布时间】:2016-10-25 20:39:09
【问题描述】:

我正在使用 jstree。树工作正常。我使用 JQuery 将 JSON 发送到 PHP 文件。这很好用。

$("#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 语句来更新旧值(可能使用 id?)并插入新值。

比如:

If id exists:
   update row
else:
   insert new row

我是 PHP 和 SQL 的新手。所以我的问题是知道访问 JSON 数组信息的 PHP 语法。所以请任何示例将不胜感激!

【问题讨论】:

  • 参见:dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html 也使用参数化查询。您对 SQL 注入持开放态度。
  • 这里有很多错误。请使用框架,因为它可以保护您免受代码开放的无数 SQL 注入漏洞的侵害。您信任没有验证的用户输入,使用字符串连接构建查询(使用@chris85 建议的参数化查询)。上面的代码中也有很多语法错误——说实话,不确定它是否真的会运行。

标签: php jquery mysql json jstree


【解决方案1】:

首先,您将使用 PHP 函数来获取与给定 ID 匹配的所有行。 if 这将返回一个,您将使用另一个函数到 UPDATEID == valueFromPreviousFunctionelse 您将调用一个函数到 INSERT 一个新行。

【讨论】:

    【解决方案2】:
        $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 
        }
    

    【讨论】:

      【解决方案3】:

      没有一个命令可以在单个操作中完成您想要的操作。

      您应该事先获取所有 ID 并分别为每个 ID 运行更新,或者使用 REPLACE INTO

      但请注意 REPLACE INTO:如果存在与主键/唯一键匹配的行,它会首先将其删除,然后插入新行,而不是更新现有行。

      【讨论】:

        猜你喜欢
        • 2020-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-18
        • 2013-09-07
        • 1970-01-01
        相关资源
        最近更新 更多