【问题标题】:PDO json_encode does not work, where is the error? [duplicate]PDO json_encode 不起作用,错误在哪里? [复制]
【发布时间】:2016-08-20 10:41:48
【问题描述】:

我是第一次尝试这个,所以我的代码完全来自教程,但它不起作用。 我在启用 JSON 1.4.0 的情况下运行 PHP 7

如果我不使用 json_encode,我可以打印结果行,所以我的连接和查询都正常。

错误报告处于活动状态,但也不输出任何内容。

如果我在我的服务器上运行 php 文件,我只会得到一个空白页。

这是我的代码:

error_reporting(-1);

try {
    $conn=new PDO("mysql:host=server.com;dbname=theDB",username,password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $conn->prepare('SELECT * FROM table');
    $stmt->execute();

    header('Content-type: application/json');
    echo json_encode($stmt->fetchAll(PDO::FETCH_ASSOC));



} catch(PDOException $e) {
        echo 'ERROR: ' . $e->getMessage();
}

【问题讨论】:

  • ini_set('display_errors', 1); 添加到您的代码或查看您的错误日志。
  • @bub PHP 中的-1 开启all PHP errors,但可能不会显示。
  • 您在尝试连接后设置异常模式。默认情况下 pdo 不会抛出异常,所以如果连接失败,它不会抛出异常,因为还没有启用异常。
  • 在末尾添加echo json_last_error_msg();。在 PDO 连接字符串中添加;charset=utf-8
  • @JayBlanchard: 哦。对……我要去喝杯咖啡。

标签: php mysql json pdo


【解决方案1】:

解决方案:(感谢@trincot 和@RiggsFolly) 我不得不改变这一行

$conn=new PDO("mysql:host=server.com;dbname=theDB",username,password);

$conn=new PDO("mysql:host=server.com;dbname=theDB;charset=UTF8",username,password);`

【讨论】:

    【解决方案2】:

    json_encode() 出错时不会抛出异常,你必须verify the result yourself:

    if (json_last_error()!==JSON_ERROR_NONE) {
        echo json_last_error_msg();
        exit;
    }
    

    几乎每次出现这个问题时都是JSON_ERROR_UTF8

    UTF-8 格式错误,可能编码不正确

    【讨论】:

      猜你喜欢
      • 2017-01-08
      • 2015-03-31
      • 1970-01-01
      • 2018-08-03
      • 2012-07-25
      • 1970-01-01
      • 1970-01-01
      • 2020-08-13
      • 1970-01-01
      相关资源
      最近更新 更多