php - 保存 json 数据时,列数与 php 第 1 行的值数不匹配

标签 php mysql

我正在尝试读取 json 数据并将其插入到 mysql 中, 但所有列似乎都与值匹配。

下面的查询哪里错了:

gmrjson.json:

{
  "rtVisitInfoOpObjV1":{
  "version":"1",
  "visitorId":"vis1",
  "dwellTime":"0",
  "poiId":"poi1",
  "srId":"sr1",
  "zoneId":"zone1",
  "poiProximityConfidence":"0",
  "zoneProximityConfidence":"0",
  "poiPresenceConfidence":"15",
  "zonePresenceConfidence":"0",
  "normalizedTime":"1489574975000"
 }
}

示例.php:

<?php
//First: read data
$fo=fopen("gmrjson.json","r");
$fr=fread($fo,filesize("gmrjson.json"));
$array=json_decode($fr,true);
//Second: create $values
$rows = array();
foreach ($array['rtVisitInfoOpObjV1'] as $key => $value)
$rows[] = "('" . $key . "', '" . $value . "')";
$values = implode(",", $rows); //echo '<pre>';print_r($values);die;


//Save to DB
$hostname = 'localhost';                 
$username = 'root';
$password = '';

try 
{
   $dbh = new PDO("mysql:host=$hostname;dbname=nodejs", $username, $password);
   echo 'Connected to database<br />';
   echo "INSERT INTO gmr(version,visitorId,dwellTime,poiId,srId,zoneId,poiProximi‌​tyConfidence,zonePro‌​ximityConfidence,poi‌​PresenceConfidence,z‌​onePresenceConfidenc‌​e,normalizedTime) VALUES " . $values;
   $count = $dbh->exec("INSERT INTO gmr(version,visitorId,dwellTime,poiId,srId,zoneId,poiProximityConfidence,zoneProximityConfidence,poiPresenceConfidence,zonePresenceConfidence,normalizedTime) VALUES " . $values) or die(print_r($dbh->errorInfo(), true)); 
    echo $count; die;
   $dbh = null;
   echo 'Success<br />';
}
catch(PDOException $e)
{
    echo $e->getMessage();
}
?>

下面是mysql表的描述

enter image description here

更新 - 调试生成的查询:

Array
(
[rtVisitInfoOpObjV1] => Array
    (
        [version] => 1
        [visitorId] => vis1
        [dwellTime] => 0
        [poiId] => poi1
        [srId] => sr1
        [zoneId] => zone1
        [poiProximityConfidence] => 0
        [zoneProximityConfidence] => 0
        [poiPresenceConfidence] => 15
        [zonePresenceConfidence] => 0
        [normalizedTime] => 1489574975000
    )

)
Connected to database
INSERT INTO gmr(version,visitorId,dwellTime,poiId,srId,zoneId,poiProximi‌​tyConfidence,zonePro‌​ximityConfidence,poi‌​PresenceConfidence,z‌​onePresenceConfidenc‌​e,normalizedTime) VALUES ('version', '1'),('visitorId', 'vis1'),('dwellTime', '0'),('poiId', 'poi1'),('srId', 'sr1'),('zoneId', 'zone1'),('poiProximityConfidence', '0'),('zoneProximityConfidence', '0'),('poiPresenceConfidence', '15'),('zonePresenceConfidence', '0'),('normalizedTime', '1489574975000')Array
(
[0] => 21S01
[1] => 1136
[2] => Column count doesn't match value count at row 1
)

最佳答案

如您所见,您的 SQL 是错误的:

INSERT INTO gmr(version,visitorId,dwellTime,poiId,srId,zoneId,poiProximi‌​tyConfidence,zonePro‌​ximityConfidence,poi‌​PresenceConfidence,z‌​onePresenceConfidenc‌​e,normalizedTime) VALUES ('version', '1'),('visitorId', 'vis1'),('dwellTime', '0'),('poiId', 'poi1'),('srId', 'sr1'),('zoneId', 'zone1'),('poiProximityConfidence', '0'),('zoneProximityConfidence', '0'),('poiPresenceConfidence', '15'),('zonePresenceConfidence', '0'),('normalizedTime', '1489574975000') ...

必须是:

INSERT INTO gmr(version,visitorId,dwellTime,poiId,srId,zoneId,poiProximi‌​tyConfidence,zonePro‌​ximityConfidence,poi‌​PresenceConfidence,z‌​onePresenceConfidenc‌​e,normalizedTime) VALUES (1, 'vis1', '0','poi1','sr1' ...)

你应该去掉数值周围的单引号

关于php - 保存 json 数据时,列数与 php 第 1 行的值数不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42827864/

相关文章:

mysql - 在我的 sql 中添加列,其中的值是不允许的

行更新时的 MySQL UPDATE TIMESTAMP,即使所有其他行数据保持不变?

mysql - 拒绝用户 'root' @'localhost' 使用密码 : yes Exception 访问

php - 表单验证在 php mysql 页面中不起作用,在没有表单验证的情况下移动到表单数据处理 php 文件上?

Php统计注册用户

PHP mySQL 结果到变量

PHP & MySQL - 如何显示类别和子类别逻辑

php - 数据库表异常

javascript - 将 json 数据渲染到 dhtmlx 调度程序

php - 如何内连接数组?