Конвертировать данные из БД в JSON, используя php
Я уже видел много вопросов, но ничего не помогло. Я хочу конвертировать мои данные из базы данных (MySQL) в JSON, используя PHP. Это мой код 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
так что ничего.
4 ответа
В вашем коде куча проблем. Для начала, у вас есть это:
$sql = mysqli_query("SELECT * FROM `user_info_book`");
$res = mysqli_query($con,$sql);
$sql
это mysqli_result
объект на успех или логическое значение false
на провал. Здесь это неверно, потому что вы не передали ссылку на базу данных ($con
). Смотрите документы. Вы не должны, не должны и не можете сохранить результат 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.
Вы инициализируете массив с именем $result
но попробуйте использовать массив с $output
идентификатор, который не был инициализирован, PHP не будет автоматически инициализировать переменную массива для вас. Вот откуда одна ошибка.
Вторая ошибка, которую я заметил:
mysqli_query("SQL")
Вы забыли передать ресурс подключения к базе данных в порядке:
mysqli(db_connection, sql_query)
Исправьте это тогда, если вам нужна дополнительная помощь, комментарий ниже.
Хорошего дня.
Таким образом, вы выполняете запрос и присваиваете результат $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);
Вы должны использовать отчеты об ошибках при разработке:
error_reporting(E_ALL);
ini_set('display_errors', '1');
Вы код плохой:
$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
В общем, вы предполагали, что ваш код идеален и никогда не может иметь никаких проблем, поэтому не смогли добавить обработку ошибок. Поскольку у вас нет обработки ошибок, вы полностью игнорировали ошибки, которые произошли.
Никогда НИКОГДА не предполагайте успех - этот код - прекрасный пример ПОЧЕМУ. Ваш sql синтаксически совершенен, но все-таки не получилось, потому что вы неправильно вызвали функцию запроса.
Всегда принимайте неудачу, проверяйте неудачу и рассматривайте успех как приятный сюрприз.