【问题标题】:Parsing JSON to MySQL table将 JSON 解析为 MySQL 表
【发布时间】:2013-01-22 15:29:40
【问题描述】:

我正在使用 Zend Framework (1.12),我想创建一个基于 JSON 文件的表。我已经创建了表格及其字段(现在它们都是长文本),它所要做的就是将它们插入到正确的列中。我遵循了这些例子:

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

问题在于我的 JSON 的构造方式不同(我的 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

【问题讨论】:

  • 发布您的 JSON。它不像您期望的那样解码为平面数组。另外你为什么打电话给mysql_query$db->query()
  • 不错的 SQL 注入孔...您正在尝试转义值...但您忘记转义密钥。您是否阅读了错误消息?您正试图逃避 ARRAY
  • @MarcB 我知道,它正在尝试解析包含我所有对象的 Actie 数组。我遇到的问题是我不知道如何正确更改代码以反映 JSON 中结构的这种变化。我意识到它正在尝试解析整个 Actie 数组。我更新了我的答案,在问题的底部包含了 JSON。
  • @haiqt:您需要遍历该子数组并执行您需要的任何操作。你没有提供任何关于你的表结构的细节。
  • @MarcB 我的问题中也包含了表格结构。您可以在i.imgur.com/KtXeEuw.png 找到。我按照问题中的教程进行操作,他们说要创建与 JSON 中的所有字段同名的列。

标签: php mysql json zend-framework


【解决方案1】:

您的 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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-25
    • 2019-09-15
    • 2023-04-10
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多