【问题标题】:sql data to json array using PHP gives HTTP ERROR 500使用 PHP 将 sql 数据转换为 json 数组给出 HTTP ERROR 500
【发布时间】:2016-11-20 09:32:15
【问题描述】:

我正在尝试使用从第一个表中获取的令牌从两个数据库表中获取数据我正在尝试在第二个表中获取团队名称。然后将其添加到数组中以最终打印 json 数组。看看我下面的代码:

$dbh = new PDO("mysql:host=localhost;dbname=dbnameabc", $username, $password);

$sql = "SELECT * FROM chatbox order by id desc";

$result = $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC);
$return = [];

foreach ($result as $row) {

    $postid  = $row['id'];
    $token   = $row['token'];
    $gpslat  = $row['gpslat'];
    $gps     = $row['gps'];
    $postmsg = $row['msg'];

    //echo $postid + " is id " + $token + " is token " + $postmsg + " is postmsg " + $gps + " is gps and " + $gpslat;

    $team;

    $sqlx    = "SELECT * FROM logintable WHERE token='$token'";
    $resultx = $dbh->query($sqlx)->fetchAll(PDO::FETCH_ASSOC);


    foreach ($resultx as $rowx) {   
        $team = $rowx['name']; 

    } 

    $return[] = [   
        'postmsg' => $postmsg, 
        'token'   => $token, 
        'gps'     => $gps, 
        'gpslat'  => $gpslat 
    ];

}
$dbh = null;

header('Content-type: application/json');
echo json_encode($return);

但是,执行上述操作会引发错误 HTTP ERROR 500。接下来我应该提到的是,我在上面评论的 echo 语句给了我一个随机数,例如 10.1421321。那么问题是什么?类似的代码在我测试过的另一个表上运行良好,但不知道为什么这不起作用。

更新:第二个查询 ($resultx = $dbh->query($sqlx)->fetchAll(PDO::FETCH_ASSOC);) 中的连接有问题,因为第一个提供 $team 以外的字段的查询工作正常,如果我不提供,我可以打印 json不使用第二个查询加上团队名称,但我如何让第二个工作?

【问题讨论】:

  • 内部服务器错误意味着生成了错误日志。您是否检查了服务器的错误日志以获取更多信息?
  • 另外,很高兴在循环给出之后向我们提供var_dump($return) 的内容。
  • 是的,我检查了错误日志,它说:Call to a member function fetchAll() on a non-object$resultx = $dbh->query($sqlx)->fetchAll(PDO::FETCH_ASSOC); @dimlucas @rjdown 行中
  • $dbh->query() 返回null 这就是非对象。连接一切正常吗?尝试启用ERRMODE_EXCEPTION 并捕获任何抛出的异常

标签: php mysql arrays json


【解决方案1】:

json_encode 函数没有问题。它工作正常。

问题是这一行: $resultx = $dbh->query($sqlx)->fetchAll(PDO::FETCH_ASSOC);

您正在对查询结果调用 fetch all,该结果失败并返回 false。尝试在控制台/GUI 中运行 SQL 查询,看看输出是什么。

如果您想查看 PDO 返回的具体错误,请使用以下函数: http://php.net/manual/en/pdo.errorinfo.php

还将您的代码更改为 2 行,以检查查询是否有效:

$stmt = $dbh->query($sqlx);
if($stmt!=false){
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 2018-05-15
    • 2015-07-02
    • 2016-07-07
    • 2013-06-18
    • 1970-01-01
    相关资源
    最近更新 更多