【问题标题】:PHP/MySQL: SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON dataPHP/MySQL:SyntaxError:JSON.parse:JSON 数据的第 1 行第 1 列出现意外字符
【发布时间】:2019-01-19 20:41:31
【问题描述】:

我有这个 MySQL 表:

mysql> select * from  members;
+-------+-----------+-----------+
| memid | firstname | lastname  |
+-------+-----------+-----------+
|     1 | billal    | begueradj |
|     2 | bill      | gates     |
|     3 | steve     | jobs      |
+-------+-----------+-----------+
3 rows in set (0.00 sec)

我有这个代码:

<?php
$output = array('error' => false);
$members = array();

try {
    $db = new PDO('mysql:host=localhost;dbname=bill;charset=utf8',
                   'root',
                   ''
    );
} catch(Exception $e) {
    die('Error in connecting to DB: <br/>'.$e->getMessage());
}

$response = $db->query('SELECT * FROM members');
while($row = $response->fetch()){
    echo $row['firstname'].' ';
    echo $row['lastname'].'<br/>';
    array_push($members, $row);
}

$output['members'] = $members;
$response->closeCursor();
$json = json_encode($out);
echo $json; // outputs correctly
header("Content-type: application/json");    // error here
die();
?>

当我运行包含上述 PHP 代码的 PHP 文件时,我收到此错误消息:

语法错误:JSON.parse:第 1 行第 1 列的意外字符 JSON 数据

为什么会这样?

附:当然,当我评论这一行时://header("Content-type: application/json"); 错误信息消失了

编辑:遵循以下 cmets 的新代码版本:

<?php
    header("Content-type: application/json");
    $output = array('error' => false);
    $members = array();

    try {
        $db = new PDO('mysql:host=localhost;dbname=bill;charset=utf8',
                       'root',
                       ''
        );
    } catch(Exception $e) {
        die('Error in connecting to DB: <br/>'.$e->getMessage());
    }

    $response = $db->query('SELECT * FROM members');
    while($row = $response->fetch()){       
        array_push($members, $row);
    }

    $output['members'] = $members;
    $response->closeCursor();
    $json = json_encode($out); 
    //echo $json;    

?>

仍然收到相同的错误消息

【问题讨论】:

  • 你真的回显了 json 吗?
  • 那么在header() 行之后你尝试了echo $json; 并且你得到一个错误?
  • 你试过 ehco 而不是 echo ^
  • 哦...是的,对不起,...现在它输出正确,但错误仍然存​​在
  • echo 放在header() 行之后。

标签: php mysql json pdo


【解决方案1】:

试试这个可能对你有帮助

if ($response->num_rows > 0) {
        while($row[] = $response -> fetch_assoc()) {
            $item = $row;
            $json = json_encode($item);
        }
    }

【讨论】:

  • 这与我在问题中发布的错误消息相同
【解决方案2】:

header() 应该放在所有输出之上,所以在你回显之前。

另外,由于您没有将整个内容编码为 JSON,而是仅将部分编码,我猜您缺少 JSON 的开头和结尾。

正确的 JSON 输出:

ex1:

{
  "key1": "value1",
  "key2": "value2",
  "key3": "value3"
}

ex2:

[
  {
    "key1": "value1",
    "key2": "value2",
    "key3": "value3"
  },
  {
    "key1": "value1",
    "key2": "value2",
    "key3": "value3"
  },
  {
    "key1": "value1",
    "key2": "value2",
    "key3": "value3"
  }
]

PHP:

<?php

$output = ["error" => false, "members" => []];

try {
  $db = new PDO("mysql:host=localhost;dbname=bill;charset=utf8", "root", "");
} catch(Exception $e) {
  die("Error in connecting to DB: <br/>{$e->getMessage()}");
}

$response = $db->query("SELECT * FROM members");

while($row = $response->fetch(PDO::FETCH_ASSOC)) {
  array_push($output["members"], $row);
}

$response->closeCursor();

$json = json_encode($output);

header("Content-type: application/json");

echo $json;

【讨论】:

    猜你喜欢
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2021-09-14
    • 2020-06-26
    • 2020-01-11
    • 1970-01-01
    相关资源
    最近更新 更多