使用 php 将数据从数据库转换为 JSON


Convert data from db to JSON using php

我已经看到很多问题,但没有任何帮助。我想使用 PHP 将数据从数据库 (MySQL) 转换为 JSON。这是我的PHP代码:

初始化.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);
?>

列表查看书籍.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,所以没什么。

你的代码中有很多问题。对于初学者,你有这个:

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

您将受益于使用像PHPStorm这样的IDE。

因此,

您执行查询并将结果分配给$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
所以

基本上,你假设你的代码是完美的,并且永远不会有任何问题,所以没有添加任何错误处理。由于您没有错误处理,因此您完全忽略了 DID 发生的错误。

永远不要假设成功 - 这段代码是为什么的完美例子。您的 sql 在语法上是完美的,但它失败了,因为您没有正确调用查询函数。

始终假设失败,检查失败,并将成功视为惊喜。

您初始化了一个名为 $result 的数组,但尝试使用具有尚未初始化的 $output 标识符的数组,PHP 不会为您自动初始化数组变量。这就是一个错误的来源。

我注意到的第二个错误是:

mysqli_query("SQL")

您忘记传入数据库连接资源,因为它应该是:

mysqli(db_connection, sql_query)

修复这些问题,然后如果您需要更多帮助,请在下面发表评论。

祝你今天开心。