2017-03-16 23 views
0

我想讀取json數據並將其插入到mysql, 但所有的列似乎都與值匹配。列數不匹配第1行php值的計數,同時保存json數據

我在哪裏錯在下面的查詢:

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" 
} 
} 

sample.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 
) 
+0

什麼是生成的SQL查詢?瞭解準備好的語句以防止SQL注入 – Jens

+0

這是您的程序生成的查詢嗎? – Jens

+0

不,我手動編寫的查詢和我在哪裏生成的SQL查詢調試 –

回答

3

正如你可以看到你的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' ...) 

你應刪除單引號arro UND的數值

+0

嗨@Jens,Scriptmans答案似乎奏效, –

+0

這是你應該接受的答案,因爲它給了你其他的錯誤信息你做了 –

+0

然後,先生,你沒有閱讀我的發佈的代碼。 – Scriptman

0

您的查詢實際上是給一對值,而不是單值

,而不是這樣做:

foreach ($array['rtVisitInfoOpObjV1'] as $key => $value) $rows[] = "('" . $key . "', '" . $value . "')"; $values = implode(",", $rows); //echo '<pre>';print_r($values);die;

做到這一點

foreach ($array['rtVisitInfoOpObjV1'] as $key => $value) array_push($rows, $value); $values = implode(",", $rows); //echo '<pre>';print_r($values);die;

相關問題