我正在尝试读取 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,poiProximityConfidence,zoneProximityConfidence,poiPresenceConfidence,zonePresenceConfidence,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表的描述
更新 - 调试生成的查询:
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,poiProximityConfidence,zoneProximityConfidence,poiPresenceConfidence,zonePresenceConfidence,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,poiProximityConfidence,zoneProximityConfidence,poiPresenceConfidence,zonePresenceConfidence,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,poiProximityConfidence,zoneProximityConfidence,poiPresenceConfidence,zonePresenceConfidence,normalizedTime) VALUES (1, 'vis1', '0','poi1','sr1' ...)
你应该去掉数值周围的单引号
关于php - 保存 json 数据时,列数与 php 第 1 行的值数不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42827864/