我想在android应用程序中通过mysql数据库读取数据。我正在使用下面的php脚本。
$con=mysqli_connect($servername,$username,$password,$db_name);
$sql = 'SELECT * FROM `Item`';
$result = array();
if (mysqli_connect_errno($con)) {
echo "Failed to connect: " . mysqli_connect_error();
}
$r = mysqli_query($con,$sql);
while($row = mysqli_fetch_array($r)) {
array_push($result,array(
'id'=>$row['id'],
'title'=>$row['title'],
'description'=>$row['description']
));
}
echo json_encode(array("result"=>$result));
mysqli_close($con);
在调试我的android应用程序时,我可以看到我得到了以下响应。
似乎数组已成功地从php返回到android应用程序,但值为null。所以我假设php代码中存在一个问题。
另外,有趣的是返回了正确的条目数。我的数据库当前有两个条目,并且返回了两个条目。。但是有空值。
2条答案
按热度按时间g6baxovj1#
如果这是我的任务,我会:
没有在响应中发送完整的错误消息(我将假设您只包含此细节以显示您执行了基本调试)。
使用面向对象的语法,因为它更简洁。
使用
fetch_all()
因为您只是将结果集数组转换为关联数组数组,以便在另一层上进行处理。根据手册:
由于mysqli\u fetch\u all()在一个步骤中将所有行作为一个数组返回,因此它可能比一些类似的函数(如mysqli\u fetch\u array())消耗更多的内存,后者一次只能从结果集中返回一行。此外,如果需要迭代结果集,则需要一个将进一步影响性能的循环构造。出于这些原因,mysqli\u fetch\u all()只应用于将获取的结果集发送到另一层进行处理的情况。
推荐代码:
fetch_all()
返回空数组。此代码段不仅在出现错误时返回信息性信息,而且非常简洁,它始终为
result
键,并且它是灵活的——不管你的Item
表增益/损失列,它不会中断,所有内容都将返回。没有循环,没有
array_push()
; 完全动态和干净的结果集 Package 。cedebl8k2#
实际上,我找到了空值的解决方案。
在将数据推送到数组时,我必须区分数据库表列的数据类型。在我的例子中,列“id”的数据类型是integer。因此,我可以使用
'id'=>$row[0]
. 其他两列(title和description)的数据类型为varchar。因此,我必须使用'title'=>"$row[1]"
.}
使用此选项,数据库表中的正确值现在可以在响应中使用。