【问题标题】:Load data from JSON file to MYSQL database将数据从 JSON 文件加载到 MYSQL 数据库
【发布时间】:2016-01-18 05:26:49
【问题描述】:

我正在尝试将来自here 的 JSON 数据中的两个字段存储在 mysql 数据库中。首先,我为我想要使用的数据创建 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]);
}

工作正常。现在我正在尝试调整This 关于通过 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 语句有效吗?任何人都可以看到这个问题吗?

亲切的问候,

【问题讨论】:

  • 删除 .查询中变量旁边的运算符
  • 应该使用或不使用 .操作员对吗?

标签: php mysql json


【解决方案1】:

快速查看一下,您的值似乎没有包含在 SQL 中的引号中。试试这个:

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

删除连接运算符 (.) 将导致相同的结果。

【讨论】:

  • 太棒了!值得注意的是,如果 $date 或 $close 有撇号,您的查询也可能会中断。确保转义您的输入。
  • @Marinus:你错过了多重查询..但是很好的答案...赢得我的投票。
【解决方案2】:

您的代码中有两个问题。

  1. 正如提到的其他伙伴,您需要为日期字符串使用引号。
  2. 其次你不能像那样使用mysqli_multi_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";
}

【讨论】:

    【解决方案3】:

    删除包裹您的值的双引号和连接符。

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

    【讨论】:

      猜你喜欢
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      • 2016-04-17
      • 2012-06-10
      • 2017-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多