Use PHP to dump mysql values into JSON file

前端 未结 3 554
醉酒成梦
醉酒成梦 2021-01-28 21:47

I am trying to generate a JSON file from a mysql database by using PHP. So far, I have:



        
相关标签:
3条回答
  • 2021-01-28 22:03

    Most likely to be UTF-8 problem with special characters, try this

    <?php
    
    error_reporting(-1);
    
    $result = mysql_query("SELECT * FROM wp_posts");
    
    $i = 0;
    while ($row = mysql_fetch_array($result)) {
        $response[$i]['post_status'] = htmlentities($row['post_status'],ENT_COMPAT, 'ISO-8859-1');
        $response[$i]['post_title'] = htmlentities($row['post_title'],ENT_COMPAT, 'ISO-8859-1');
    
        $data['posts'][$i] = $response[$i];
        $i = $i + 1;
    }
    
    $json_string = json_encode($data);
    
    $file = 'file.json';
    file_put_contents($file, $json_string);
    ?> 
    
    0 讨论(0)
  • 2021-01-28 22:16

    Try something like this.

    error_reporting(-1);
    
    $result = mysql_query("SELECT * FROM wp_posts");
    
    $data = array();
    
    while ($row = mysql_fetch_array($result)) {
        $data['posts']['post_status'][] = $row['post_status'];
        $data['posts']['post_title'][] = $row['post_title'];
    }
    
    $json_string = json_encode($data);
    
    $file = 'file.json';
    file_put_contents($file, $json_string);
    
    0 讨论(0)
  • 2021-01-28 22:17

    Random guess: json_encode expects UTF-8 encoded data and will exhibit the behavior you describe on any non-UTF-8, non-ASCII input. The data you're getting from the database is likely Latin-1 encoded.

    Either set your database connection to utf8 to receive UTF-8 encoded data directly from the database (see UTF-8 all the way through), or use (and I hate to say this, because this function is so often abused it's not even funny, but it's correctly applied here) utf8_encode on all data you get from the database to convert it from Latin-1 to UTF-8.

    So either:

    // set the connection charset
    mysql_set_charset('utf8');
    
    $result = mysql_query("SELECT post_status, post_title FROM wp_posts");
    
    $data = array();
    while ($row = mysql_fetch_assoc($result)) { 
        $data['posts'][] = $row;
    } 
    
    $json_string = json_encode($data);
    
    ...
    

    or:

    $result = mysql_query("SELECT post_status, post_title FROM wp_posts");
    
    $data = array();
    while ($row = mysql_fetch_assoc($result)) { 
        $row = array_map('utf8_encode', $row);
        $data['posts'][] = $row;
    } 
    
    $json_string = json_encode($data);
    
    ...
    
    0 讨论(0)
提交回复
热议问题