2016-03-08 7 views
0

Я уже видел много вопросов, но ничего не помогло. Я хочу преобразовать свои данные из базы данных (MySQL) в JSON с помощью PHP. Это мой PHP код:Преобразование данных из db в JSON с использованием php

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

Также я не думаю, что вы можете установить кодировку непосредственно в соединение, вам может понадобиться '$ con> set_charset ('utf8');' – Mihai

+0

спасибо Mihai – Carlo

ответ

1

В вашем коде есть множество проблем. Для начала, у вас есть это:

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

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

$sql является mysqli_result объект на успех или булевой false на провал. Здесь это неверно, потому что вы не передали ссылку базы данных ($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();?

Вам будет полезно использовать IDE, например PHPStorm.

+0

Большое спасибо, я новичок в php. Спасибо, Эд. – Carlo

+0

@ Карло Рад помочь! –

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); 

Вы должны использовать отчет об ошибках, когда deve литье:

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 неудачу, потому что вы не вызываете функцию запроса правильно.

Вы тогда слепо использовать эту логическую ложь, как если бы это была строка запроса:

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

Так в принципе, вы предположить, что ваш код был совершенным, и никогда не мог когда-либо, возможно, есть какие-либо проблемы, поэтому не удалось добавить любого обработка ошибок. Поскольку у вас нет обработки ошибок, вы полностью игнорируете ошибки, которые возникли в DID.

Никогда EVER Предположите успех - этот код является прекрасным примером ПОЧЕМУ. Ваш sql синтаксически совершенен, но он провалился, потому что вы неправильно вызывали функцию запроса.

Всегда принимайте отказ, проверяйте неудачу и относитесь к успеху как к приятному удивлению.

+0

Большое спасибо, я новичок в php. Спасибо, Марк. – Carlo

0

Вы инициализируете массив с именем $result, но пытаетесь использовать массив с идентификатором $output, который не был инициализирован, PHP не будет автоматически инициализировать переменную массива для вас. Отсюда возникает одна ошибка.

Вторая ошибка, я заметил:

mysqli_query("SQL") 

Вы забыли передать ресурс соединения с базой данных, как это должно быть:

mysqli(db_connection, sql_query) 

Fix те тогда, если вам нужна дополнительная помощь, комментарий ниже ,

Удачного дня.

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