2016-03-08 70 views
0

我已經看到很多問題,但沒有任何幫助。 我想使用PHP將我的數據從數據庫(MySQL)轉換爲JSON。這是我的PHP代碼:使用php將數據從數據庫轉換爲JSON

的init.php

<?php 
$db_name = "webappdb"; 
$mysql_user = "root"; 
$mysql_pass = "root"; 
$server_name = "localhost"; 
$charset= "utf8"; 

$con = mysqli_connect($charset, $server_name, $mysql_user, $mysql_pass, $db_name); 
?> 

listViewBooks.php

<?php 

include("init.php"); 

header('Content-Type: application/json'); 

// get all items from user_info_book table 
$sql = mysqli_query("SELECT * FROM `user_info_book`"); 

$res = mysqli_query($con,$sql); 

$result = array(); 

while($row = mysqli_fetch_array($res)){ 
    $output[] = $row; 
} 

echo json_encode($output); 
echo json_last_error(); 

mysqli_close($con); 

?> 

的錯誤是0,所以沒什麼。

+0

不需要$ res你已經在運行查詢$ sql – Mihai

+0

另外我不認爲你可以直接在連接中設置charset,你可能需要做'$ con> set_charset('utf8');'' – Mihai

+0

謝謝Mihai – Carlo

回答

1

你的代碼有一堆問題。對於初學者來說,你有這樣的:

$sql = mysqli_query("SELECT * FROM `user_info_book`"); 

$res = mysqli_query($con,$sql); 

$sql是成功或失敗的布爾false一個mysqli_result對象。在這裏,它是錯誤的,因爲你沒有通過數據庫鏈接($con)。見the docs。你不應該,也不需要,不能mysqli_query的結果存儲在變量($sql)中,然後在另一個調用中將該變量傳遞給mysqli_query。只要做到:

$sql = "SELECT * FROM `user_info_book`"; 

$res = mysqli_query($con, $sql); 

此外,初始化一個數組,然後添加到另一個:

$result = array(); 

while($row = mysqli_fetch_array($res)){ 
    $output[] = $row; 
} 

也許你的意思做$output = array();

您將受益於使用像PHPStorm這樣的IDE。

+0

非常感謝,我是新來的PHP。謝謝埃德。 – Carlo

+0

@Carlo很高興幫助! –

0

所以你執行一個查詢,然後將結果以$sql

$sql = mysqli_query("SELECT * FROM `user_info_book`"); 

但隨後再次查詢和使用$sql結果就好像它是一個字符串:

$res = mysqli_query($con,$sql); 

可能更多的是什麼你在想:

$sql = "SELECT * FROM `user_info_book`"; 
$res = mysqli_query($con,$sql); 

你應該在開發時使用錯誤報告loping:

error_reporting(E_ALL); 
ini_set('display_errors', '1'); 
+0

非常感謝,我是php新手。謝謝AbraCadaver。 – Carlo

0

你的代碼是壞:

$sql = mysqli_query("SELECT * FROM `user_info_book`"); 
        ^---missing DB handle 
^---query result handle 

所以$sql成爲失敗的布爾false,因爲你沒有正確地調用查詢功能。

然後盲目地使用這個布爾值false,如果它是一個查詢字符串:

$res = mysqli_query($con,$sql); 
          ^---boolean false, due to previous errors 

因此,基本上,你認爲你的代碼是完美的,不可能永遠不可能有任何問題,所以沒有添加任何錯誤處理。由於您沒有錯誤處理,您完全忽略了DID發生的錯誤。

從不EVER假設成功 - 這段代碼是WHY的一個完美例子。你的sql在語法上是完美的,但它失敗了,因爲你沒有正確地調用查詢函數。

總是假設失敗,檢查失敗,並將成功視爲令人驚喜的事情。

+0

非常感謝,我是新來的PHP。謝謝Marc。 – Carlo

0

您初始化一個名爲$result的數組,但嘗試使用一個數組,其中$output標識符尚未初始化,PHP將不會自動爲您初始化一個數組變量。這是一個錯誤來自哪裏。

我注意到的第二個錯誤是:

mysqli_query("SQL") 

你忘了在數據庫連接資源傳遞,因爲它應該是:

mysqli(db_connection, sql_query) 

解決這些然後如果你需要更多的幫助,下面發表評論。

祝您有美好的一天。