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); 
?> 
+0

您的表格中恰好有6列?最好在你的'select'语句中明确列出列名。 – trincot

+0

我认为你的问题可能是'json_encode'。如果你只是'print_r($ rows)',你会得到一个输出吗? – trincot

+0

该手册确实有一个'SELECT *'方法示例http://php.net/manual/en/mysqli-stmt.bind-result.php,但不像你想在这里使用它。看看它的起始位置,因为*“很多人不喜欢bind_result如何与预处理语句一起工作!”* –

编辑:你不能在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可以显着增加数据库的大小。理想情况下,将文件保存到数据库中的文件夹及其路径是许多人首选的方法。但是,这个选择完全属于你。


请参阅答案下的意见。

没有任何我可以添加到此。

+0

为什么这个dv,我对这个是对的。 –

+0

你确定吗?我认为'select *'可以用于结果绑定。 – trincot

+0

其实你可以。我每次都这样做,这是绝对正确的。 – nanocv