2016-07-01 3 views
1

Существует много примеров этого в StackOverflow, но я не вижу ошибки в моем коде. Я последовал за несколькими учебниками и скопировал код с этого форума, и он по-прежнему ошибается в ошибках.Получение JSON из PHP Соединение с 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 и веб-серверах. Какие ошибки вы можете заметить? Кроме того, у меня нет скрипта или чего-то еще, это прямой PHP.

Спасибо заранее!

+0

вместо 'fetch_assoc' либо использовать' 'fetch_array' или $ resArray [] = utf8_encode ($ строки [ 'put_column_name_here']); // повторить его в то время как петли для всех столбец' и проверка –

+0

Хорошо, попробую. В чем же разница с 'fetch_assoc' и другими методами' fetch_'? Мне трудно понять, почему некоторые примеры используют его. – Frank

+1

'fetch_assoc' дал вам ассоциативный массив, поэтому вам нужно использовать имена столбцов. в то время как 'fetch_array()' дает вам комбинацию (числовой + ассоциативный). вы можете получить только числовые. проверьте на google для этого –

ответ

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

Эй, @ Бармар, знаете ли вы, что я мог видеть эту «бо?» В браузере, пока я вижу это «boθ» в базе данных? похоже, у меня все еще есть проблемы UTF-8. Моя база данных и таблицы - все 'utf8mb4'. – Frank

+0

Убедитесь, что у вас есть правильная кодировка, указанная в ''. – Barmar

2

Вы можете попытаться принести как это путем записи на массив и json_encode массива, где имя и last_name являются именами ваших строк в базе данных

  $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

Смежные вопросы