mysqli准备不会输出为json
我试图从一个sql表中检索所有记录并将其作为json返回,但它保持不返回任何内容,即使sql查询返回phpMyAdmin中的多行。我甚至尝试在循环内输出所有的$id
,但是当我将它作为数组返回时,它只是返回一个空白页面。我不知道这是否可能是由数据库中的$image
引起的。mysqli准备不会输出为json
<?php
error_reporting(-1);
ini_set('display_errors', 'On');
include('config.php');
$stmt = $db->prepare('SELECT * FROM camps');
$stmt->execute();
$stmt->bind_result($id, $title, $body, $long, $lat, $img);
$rows = array();
while ($stmt->fetch()) {
$rows[] = array(
'id' => $id,
'title' => $title,
'body' => $body,
'long' => $long,
'lat' => $lat,
'image' => $img
);
echo $img;
}
$stmt->close();
$db->close();
echo json_encode($rows);
?>
编辑:你不能在SELECT *
声明绑定,除非在bind_result()
数量相匹配您在数据库中有列总数。否则,您必须选择所有列并与您的查询中的列数相匹配,如bind_result()
。另请参阅下面的链接,了解如何显示数据库中的图像。
(我有宽阔的肩膀,承认我的错误,没有人会学到任何东西而没有做任何事情,我今天已经学到了一些东西)。
参考:
已经检查你的查询错误,会扔你一些事情,它应该是这样的。
的手册规定:
注意,所有列必须mysqli_stmt_execute后绑定(),并在调用mysqli_stmt_fetch()。根据列类型,绑定变量可以默默地变为相应的PHP类型。
那么,我不在这里?也许他们应该改写它,因为他们提出了它。
编辑:测试
测试什么OP张贴在PHP版本5.6.21运行自己的服务器上的代码后,回来:
警告:mysqli_stmt :: bind_result():绑定变量的数量与准备语句中的字段数不匹配...
when usi ng SELECT * FROM table
还没有给出JSON结果。使用SELECT col1, col2 FROM table
不会引发该错误。
另外,您正试图从数据库中回显图像;你不能用JSON来做到这一点,你需要使用不同的方法。
参见有关如何从数据库回波图像上堆栈以下问题:
所以你$img
看起来是这样的:
echo '<img src="data:image/jpeg;base64,'.base64_encode($img).'"/>';
这是我已经成功测试的东西用。
- 有你需要,虽然知道的东西,那就是确保每个那些行的对他们的图像,否则随时被打破图像图标不包含的那些图像(blob)。
如果是这种情况,则需要将其限制为WHERE子句。
NOTA:使用blob可以显着增加数据库的大小。理想情况下,将文件保存到数据库中的文件夹及其路径是许多人首选的方法。但是,这个选择完全属于你。
请参阅答案下的意见。
没有任何我可以添加到此。
您的表格中恰好有6列?最好在你的'select'语句中明确列出列名。 – trincot
我认为你的问题可能是'json_encode'。如果你只是'print_r($ rows)',你会得到一个输出吗? – trincot
该手册确实有一个'SELECT *'方法示例http://php.net/manual/en/mysqli-stmt.bind-result.php,但不像你想在这里使用它。看看它的起始位置,因为*“很多人不喜欢bind_result如何与预处理语句一起工作!”* –