2016-05-15 60 views
-2

我試圖從一個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如何與預處理語句一起工作!」* –

回答

2

編輯:你不能在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