我正在尝试从sql表中检索所有记录并将其作为json返回,但是它不会返回任何内容,即使sql查询在phpMyAdmin中返回多行。我甚至尝试在循环中输出所有$id
,但是当我将它作为数组返回时,它只返回一个空页面。我不知道这是否可能是由$image
引起的,数据库中的这是一个blob。
<?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);
?>
答案 0 :(得分:2)
已编辑:除非SELECT *
中的数字与您在数据库中的总列数相匹配,否则无法绑定bind_result()
语句。否则,您必须选择所有列,并与bind_result()
中的列数相匹配。另请参阅以下链接,了解如何显示数据库中的图像。
(我有宽阔的肩膀,会承认我的错误。没有人做任何事情都没有学到任何东西,我今天也学到了一些东西。)
参考:
检查了你的查询中的错误,如果是这样的话,就会抛出一些关于它的东西。
手册说明:
请注意,所有列必须在mysqli_stmt_execute()之后和调用mysqli_stmt_fetch()之前绑定。根据列类型,绑定变量可以静默更改为相应的PHP类型。
那么,我到底在哪里?也许他们应该重写它,因为他们想出来了。
修改:测试
在测试运行在PHP 5.6.21版下的我自己的服务器上代码的OP之后,回过头来:
警告:mysqli_stmt :: bind_result():绑定变量数与...中预准备语句中的字段数不匹配。
使用SELECT * FROM table
但确实给了JSON结果。
使用SELECT col1, col2 FROM table
没有抛出该错误。
此外,您正在尝试回显数据库中的图像;你不能用JSON做到这一点,你需要使用不同的方法。
请参阅Stack上有关如何从db回显图像的以下问题:
所以你的$img
看起来像是:
echo '<img src="data:image/jpeg;base64,'.base64_encode( $img ).'"/>';
这是我成功测试的内容。
如果是这种情况,则需要将其限制为WHERE子句。
NOTA:使用blob可以大大增加数据库的大小。理想情况下,保存文件夹中的文件及其在数据库中的路径是许多人喜欢的方法。但是,这个选择完全属于你。
参考答案中的评论。
我无法添加任何内容。