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

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

Другие вопросы по тегам