2013-01-22 25 views
1

我正在使用Zend框架(1.12),我想創建一個基於JSON文件的表。我已經創建了表格和它的字段(它們現在都是長文本),只需將它們插入到正確的列中即可。我跟着這些例子:解析JSON到MySQL表

http://www.daniweb.com/web-development/php/threads/381669/json-to-mysql-with-php(第二支柱) Parse JSON to mySQL

的問題是,我的JSON構造不同的(我有一個「根元素」之稱Actie,真的不知道正確的術語),它包含一個包含所有對象的數組。目前我使用此代碼:

$actieurl = "http://creative3s.com/thomas/nmdad/actie.json"; 
     $my_arr = json_decode(file_get_contents($actieurl)); 

     $db = new Zend_Db_Adapter_Pdo_Mysql(array(
      'host' => 'localhost', 
      'username' => 'root', 
      'password' => NULL, 
      'dbname' => 'zf-tutorial' 
      )); 

     foreach($my_arr as $key => $value){ 
      $sql[] = (is_numeric($value)) ? "`$key` = $value" : "`$key` = '" . mysql_real_escape_string($value) . "'"; 
     } 

     $sqlclause = implode(",",$sql); 
     $query = "INSERT INTO `testerdetest` SET $sqlclause"; 
     $db->query($query); 

但我發現了一個錯誤,說我傳遞一個數組:

Warning: mysql_real_escape_string() expects parameter 1 to be string, array given in C:\Users\Thomas\Documents\GitHub\NMDAD-testing\application\controllers\IndexController.php on line 29 

有誰知道如何與這個JSON解決這個格式?請記住,我無法以任何方式更改JSON。額外的鏈接:

JSON:http://creative3s.com/thomas/nmdad/actie.json 表結構:http://i.imgur.com/KtXeEuw.png

+0

安置自己的JSON。它不像你期望的那樣解碼爲平面陣列。另外你爲什麼要調用'mysql_query'和'$ db-> query()'? – Cfreak

+1

漂亮的SQL注入漏洞......你試圖逃避價值......但你忘記了逃避關鍵。你讀過錯誤信息了嗎?你試圖逃脫**陣列**。 –

+0

@MarcB我知道,它試圖解析包含我所有對象的Actie數組。我遇到的問題是我不知道如何正確地更改代碼以反映JSON中的結構變化。我意識到它試圖解析整個Actie陣列。 我更新了我的答案,在問題的底部包含了JSON。 – thomastuts

回答

2

您的JSON數據具有頂級鍵 'Actie',所以你需要通過$my_arr->Actie進行循環。

您可以簡化您的代碼只是:

$actieurl = "http://creative3s.com/thomas/nmdad/actie.json"; 
$my_arr = json_decode(file_get_contents($actieurl)); 

$db = new Zend_Db_Adapter_Pdo_Mysql(array(
    'host' => 'localhost', 
    'username' => 'root', 
    'password' => NULL, 
    'dbname' => 'zf-tutorial' 
)); 

foreach($my_arr->Actie as $row){ 
    $db->insert('testerdetest', (array)$row); 
} 
+0

非常感謝Tim,這只是個訣竅! – thomastuts