mysqli prepare不会输出为json

时间:2016-05-15 19:49:32

标签: php mysql json mysqli

我正在尝试从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);
?>

1 个答案:

答案 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 ).'"/>';

这是我成功测试的内容。

  • 你需要知道一些事情,那就是确保每一行都有一个图像,否则就会出现不包含图像的图像图标(blob)

如果是这种情况,则需要将其限制为WHERE子句。

NOTA:使用blob可以大大增加数据库的大小。理想情况下,保存文件夹中的文件及其在数据库中的路径是许多人喜欢的方法。但是,这个选择完全属于你。

参考答案中的评论。

我无法添加任何内容。