Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 试图让json_encode返回行名以及mysql表中的数据_Php_Mysql_Json - Fatal编程技术网

Php 试图让json_encode返回行名以及mysql表中的数据

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

我正在尝试以JSON格式返回数据。所需的格式如下

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