【发布时间】: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并捕获任何抛出的异常