2016-07-01 74 views
1

在StackOverflow上有很多這樣的例子,但我在代碼中看不到錯誤。我跟着幾個教程,並從這個論壇複製了一些代碼,它仍然錯誤錯誤。從PHP獲取JSON MySQL連接

CREATE TABLE查詢:

CREATE TABLE `e1_ENGLISH` (
    `entry_id` int(11) NOT NULL AUTO_INCREMENT, 
    `words_e1` char(30) NOT NULL, 
    `date` date DEFAULT NULL, 
    `phonetic_e1` varchar(50) NOT NULL, 
    PRIMARY KEY (`entry_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=utf8mb4 

我的PHP代碼:

<?php 
// establish connection 
// mysqli contect (host, user, pass, db) 
$conn = mysqli_connect("localhost","androidapp","password","myDB"); 

// check for connection success 
if(!$conn) { 
    die("Error, could not connect: " . mysqli_connect_error()); 
} 

// build query 
$sql = "SELECT * FROM e1_ENGLISH"; 
$result = mysqli_query($conn, $sql); // fetch data 

// convert result to array 
$resArray = array(); 
while ($row = mysqli_fetch_assoc($result)) { 
    //$resArray[] = $row; 
    $resArray[] = utf8_encode($row); 
} 

// display result 
echo json_encode($resArray); 

// close connection 
mysqli_close($conn); 
?> 

輸出我得到(與utf8_encode):

[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null] 

我得到了一個空白的屏幕,只是$resArray[] = $row;

我是PHP,MySQL數據和web服務器的新手。你可以發現任何錯誤?另外,我沒有腳本或任何東西,這是直的PHP。

預先感謝您!

+0

代替'fetch_assoc'要麼使用'fetch_array'或'$ resArray [] =函數utf8_encode($行[ 'put_column_name_here']); //重複它在while循環的所有列'並檢查 –

+0

好吧,會嘗試。 'fetch_assoc'和其他'fetch_'方法有什麼不同?我無法理解爲什麼有些示例使用它。 – Frank

+1

fetch_assoc給你關聯數組,所以你需要在那裏使用列名。而'fetch_array()'給你兩個組合(數字+關聯)。你也只能得到數字。檢查谷歌 –

回答

2

utf8_encode()的參數必須是字符串,您不能在數組上調用它。您需要遍歷$row在每個元素上調用它。

$resArray = array(); 
while ($row = mysqli_fetch_assoc($result)) { 
    foreach ($row as &$val) { 
     $val = utf8_encode($val); 
    } 
    $resArray[] = $row; 
} 
+0

謝謝!這似乎向我顯示了JSON格式的數據。 – Frank

+0

嘿@Barmar,你知道我可以在瀏覽器中看到這個'bo?',而我在數據庫中看到這個'boθ'嗎?似乎我仍然有UTF-8問題。我的數據庫和表都是'utf8mb4'。 – Frank

+0

確保你有''中指定的正確編碼。 – Barmar

2

您可以嘗試通過記錄陣列上這樣的獲取和json_encode數組,其中名字和姓氏是你行的名字在你的數據庫

  $res_array = array(); 

      while($row = $result->mysqli_fetch_assoc()) { 
       $single_record = array(  
        "NAME_U_WANT1" => $row['NAME'], 
        "NAME_U_WANT2" => $row['LAST_NAME'], 
       ); 
       array_push($res_array, $single_record); 
      } 

     return json_encode($res_array); 

,你看你有沒有循環的行

2

utf8_encode()需要一個字符串。編碼每個數組元素與array_map()

while ($row = mysqli_fetch_assoc($result)) { 
    $resArray[] = array_map('utf8_encode', $row); 
} 
echo json_encode($resArray); 
+0

嘿,謝謝,但我從服務器得到一個500錯誤。什麼可能與這條線衝突? – Frank

+0

沒什麼,你必須有其他問題。 – AbraCadaver