Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将数据从JSON文件加载到MYSQL数据库_Php_Mysql_Json - Fatal编程技术网

Php 将数据从JSON文件加载到MYSQL数据库

Php 将数据从JSON文件加载到MYSQL数据库,php,mysql,json,Php,Mysql,Json,我试图存储mysql数据库中JSON数据的两个字段。首先,我使用以下方法为我想要的数据创建PHP数组: $o = file_get_contents("vixData.json"); $o = json_decode($o); $date = []; $close = []; $set = $o->dataset->data; foreach($set as $pos) { array_push($date,$pos[0]); array_push($close,$pos[4])

我试图存储mysql数据库中JSON数据的两个字段。首先,我使用以下方法为我想要的数据创建PHP数组:

$o = file_get_contents("vixData.json");
$o = json_decode($o);
$date = []; 
$close = []; 
$set = $o->dataset->data;
foreach($set as $pos)
{
array_push($date,$pos[0]);
array_push($close,$pos[4]);
}
很好。现在,我正在尝试修改关于通过php数组插入多行的问题。首先,我将阵列内爆:

$date = implode(",", $date);
$close = implode(",", $close);
然后尝试使用以下命令插入数据库:

  $sql = "INSERT INTO vix (date,close) VALUES (".$date.",".$close.")";

    if (mysqli_multi_query($dbc, $sql)) {
        echo "VIX Load Successful";
    } else {
        echo "VIX Load Error";
    }
我看到我的加载错误。没有数据库连接问题,因为我的脚本前面使用了$dbc。尝试调试;我的SQL INSERT语句有效吗?有人能看到这个问题吗


您好,

快速看一下,您的值似乎没有在SQL中用引号括起来。试试这个:

$sql = "INSERT INTO vix (date,close) VALUES ('".$date."','".$close."')";

删除concat操作符(.)将导致相同的结果。

代码中有两个问题

  • 如前所述,其他mate需要对日期字符串使用引号
  • 其次,您不能像那样使用
    mysqli\u multi\u query()
  • 修改代码:

    您可以使用多个
    INSERT
    语句,如下所示:

    $o = file_get_contents("vixData.json");
    $o = json_decode($o);
    $date = []; 
    $close = []; 
    $set = $o->dataset->data;
    foreach($set as $pos)
    {
        array_push($date,$pos[0]);
        array_push($close,$pos[4]);
    }
    
    $sql = "";
    foreach ($date as $key => $value) {
        $sql .= "INSERT INTO vix (date,close) VALUES ('".$value."','".$close[$key]."'); ";
    }
    
    if (mysqli_multi_query($dbc, $sql)) {
        echo "VIX Load Successful";
    } else {
        echo "VIX Load Error";
    }
    

    删除包装值的双引号和concatator

    $sql = "INSERT INTO vix (date,close) VALUES ('$date','$close')";
    

    去除查询中变量旁边的运算符应使用或不使用。接线员对吗?太棒了!值得注意的是,如果$date或$close有撇号,您的查询可能也会中断。确保转义您的输入。@Marinus:您错过了多重查询。。但是很好的回答。。。赢得我的选票。