在android中读取mysql数据库返回空值

ht4b089n  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(498)

我想在android应用程序中通过mysql数据库读取数据。我正在使用下面的php脚本。

  1. $con=mysqli_connect($servername,$username,$password,$db_name);
  2. $sql = 'SELECT * FROM `Item`';
  3. $result = array();
  4. if (mysqli_connect_errno($con)) {
  5. echo "Failed to connect: " . mysqli_connect_error();
  6. }
  7. $r = mysqli_query($con,$sql);
  8. while($row = mysqli_fetch_array($r)) {
  9. array_push($result,array(
  10. 'id'=>$row['id'],
  11. 'title'=>$row['title'],
  12. 'description'=>$row['description']
  13. ));
  14. }
  15. echo json_encode(array("result"=>$result));
  16. mysqli_close($con);

在调试我的android应用程序时,我可以看到我得到了以下响应。

似乎数组已成功地从php返回到android应用程序,但值为null。所以我假设php代码中存在一个问题。
另外,有趣的是返回了正确的条目数。我的数据库当前有两个条目,并且返回了两个条目。。但是有空值。

g6baxovj

g6baxovj1#

如果这是我的任务,我会:
没有在响应中发送完整的错误消息(我将假设您只包含此细节以显示您执行了基本调试)。
使用面向对象的语法,因为它更简洁。
使用 fetch_all() 因为您只是将结果集数组转换为关联数组数组,以便在另一层上进行处理。
根据手册:
由于mysqli\u fetch\u all()在一个步骤中将所有行作为一个数组返回,因此它可能比一些类似的函数(如mysqli\u fetch\u array())消耗更多的内存,后者一次只能从结果集中返回一行。此外,如果需要迭代结果集,则需要一个将进一步影响性能的循环构造。出于这些原因,mysqli\u fetch\u all()只应用于将获取的结果集发送到另一层进行处理的情况。
推荐代码:

  1. if (!$con = new mysqli($servername, $username, $password, $db_name)) {
  2. $response = "Database Connection Error"; // $con->connect_error
  3. } elseif (!$result = $con->query("SELECT * FROM `Item`")) {
  4. $response = "Query Syntax Error"; // check $con->error; because your query failed
  5. } else {
  6. $response = $con->fetch_all($result, MYSQLI_ASSOC);
  7. }
  8. echo json_encode(["result" => $response]);
  • 注意,当结果集中没有行时, fetch_all() 返回空数组。

此代码段不仅在出现错误时返回信息性信息,而且非常简洁,它始终为 result 键,并且它是灵活的——不管你的 Item 表增益/损失列,它不会中断,所有内容都将返回。
没有循环,没有 array_push() ; 完全动态和干净的结果集 Package 。

展开查看全部
cedebl8k

cedebl8k2#

实际上,我找到了空值的解决方案。
在将数据推送到数组时,我必须区分数据库表列的数据类型。在我的例子中,列“id”的数据类型是integer。因此,我可以使用 'id'=>$row[0] . 其他两列(title和description)的数据类型为varchar。因此,我必须使用 'title'=>"$row[1]" .

  1. while($row = mysqli_fetch_array($r)) {
  2. array_push($result,array(
  3. 'id'=>$row[0],
  4. 'title'=>"$row[1]",
  5. 'description'=>"$row[2]"
  6. ));

}
使用此选项,数据库表中的正确值现在可以在响应中使用。

相关问题