Php 试图让json_encode返回行名以及mysql表中的数据
我正在尝试以JSON格式返回数据。所需的格式如下Php 试图让json_encode返回行名以及mysql表中的数据,php,mysql,json,Php,Mysql,Json,我正在尝试以JSON格式返回数据。所需的格式如下 { "projects" : [ { "title":"title 1", "image":"Image1", "subtitle":"subtitle 1", "about":"Blah Blah Blah" }, { "title":"title 2", "image":"Image2", "subtitle":"subtitle 2", "about":"Blah
{ "projects" : [
{
"title":"title 1",
"image":"Image1",
"subtitle":"subtitle 1",
"about":"Blah Blah Blah"
},
{
"title":"title 2",
"image":"Image2",
"subtitle":"subtitle 2",
"about":"Blah Blah Blah"
}
]}
下面的代码从数据库中获取数据,并将其作为JSON数据返回到视图中。我的总体目标是以正确的JSON格式返回此数据,这样我就可以在视图中使用mustaches模板工具进行查询。当我将值设置为行时,下面的代码可以完美地工作,例如
$userInfo["projects"][] = array("title" => $row[0], "subtitle" => $row[1], "about" => $row[3]);
但是,我不想使用此方法,因为我希望响应自动返回行名称和数据。原因是,如果用户向数据库添加新行,它将自动返回响应,而无需在代码中手动添加另一行
下面的代码是我的api.php文件
function customError($errno, $errstr) {
echo "<b>Error:</b> [$errno] $errstr";
}
//set error handler
set_error_handler("customError");
$host = "localhost";
$user = "root";
$pass = "root";
$databaseName = "laravel";
$tableName = "projects";
//$row ='';
$con = mysqli_connect('localhost','root','root');
$return = new stdClass();
$return->projects = array();
$result = mysqli_query($con,"SELECT * FROM $tableName");
if($result !== false) {
while($row = mysqli_fetch_object($result)){
$return->projects[] = $row;
}
}
//echo '<pre>';
//print_r($return);
//echo '</pre>';
echo json_encode($return);
下面是我将数据作为JSON回显的结果。谁能帮我一下吗
提前感谢您的任何建议或提示 如果你坚持使用
mysql.*
(你不应该这么做,因为它们已经被弃用了),你最好使用mysql.\u fetch.\u对象。这将使您的代码简化为:
请注意:
- 在这里,我消除了关于返回集中是否有行的整个if-else条件。若调用者希望得到格式良好的JSON响应,那个么您应该给他一个,即使它不包含任何行。在没有行时提供JSON编码的字符串响应的方法是错误的,因为这不是官方记录的JSON数据格式。调用方可以很容易地确定结果集中没有行,并相应地进行操作
mysql\u fetch\u object()
自动将列名设置为属性键,因此根本不需要在另一个操作中检索字段名。您还可以使用mysql\u fetch\u assoc
获取一个关联数组(它编码为JSON对象表示法)。不过,我更喜欢思考和处理对象,因为这最终是您要编码的对象(JSON没有关联数组概念)。我认为这使代码的读者更清楚地了解了意图
- 在构建数据结构之后,我在最后执行一个
json\u encode()
步骤。这是构建有效JSON的唯一方法
- 同样,您真的不应该为新代码使用
mysql.*
函数。使用mysqli
或PDO
两者都支持从结果集中获取对象
我不知道;我不明白你在这里说的“表名”是什么意思。在理想的JSON示例中,我看不到有任何地方列出了所涉及的DB表的名称,事实上,您只查询了一个DB表。不过,在序列化为JSON之前,您确实需要构建完整的数据结构。在每次循环迭代中回显一堆不同的JSON位不会向调用者返回有效的JSON。我会更新这个问题。我如何构建一个完整的数据结构,在序列化为JSON之前自动返回每个行的名称和数据?由于某些原因,我没有得到这个解决方案的任何响应。页面仍然没有返回任何内容。我似乎得到的唯一错误是上面while循环结束时出现了预期的“')”。我替换了它,但页面上仍然没有显示任何内容。抱歉,更新了我的错误检查。。。这就是我现在得到的。。。错误:[8192]mysql_connect():mysql扩展已弃用,将来将被删除:使用mysqli或PDO INSTEADERROR,因此我将代码从mysql更新为mysqli,现在我收到以下错误。。[2] mysqli_select_db()希望参数1为mysqli,字符串给定错误:[2]mysqli_query()希望至少有2个参数,1个给定错误:[2]mysqli_fetch_object()希望参数1为mysqli_result,null给定{“projects”:[]}很抱歉缺少括号。我已经改正了上面的错误。从您上次的笔记中可以看出,您的mysqli\u connect()
似乎没有成功。编写代码时,应检查并记录每个步骤的错误(即连接、db选择、查询)。您似乎还需要查看每个mysqli
函数的文档。例如,您不能简单地将一个参数传递给mysqli\u query
——您必须同时传递查询和数据库连接。
stdClass Object
(
[projects] => Array
(
)
)
{"projects":[]}
// initialize object to store return values
$return = new stdClass();
// create empty projects array on return object
$return->projects = array();
$result = mysql_query("SELECT * FROM $tableName");
if($result !== false) {
while($row = mysql_fetch_object($result)) {
$return->projects[] = $row;
}
}
echo json_encode($return);