我正在开发一个Android应用程序,其中包括与PostgreSQL数据库的通信(在线和下载)。我想从数据库中检索数据使用PHP脚本。
表名为"table",列为"id"、"username"answers"title"。
在一个非常简单的情况下(表中只有一个条目),这对我来说是有效的:
$statement = $pdo->prepare("SELECT * FROM table");
$result = $statement->execute();
$fetched= $statement->fetch();
$echo = array();
array_push($echo,array(
"id"=>$fetched['id'],
"username"=>$fetched['username'],
"title"=>$fetched['title']
));
echo json_encode(array("result"=>$echo);
Android的数据接收使用
JSONObject ob = new JSONObject(response);
,我可以读取数据作为JSON对象。
然而,我也有需要从表中获取多个条目的情况。我读了很多教程,但它们都有不同的方法。我尝试了以下操作:
$statement = $pdo->prepare("SELECT * FROM table");
$result = $statement->execute();
$fetched= $statement->fetch();
$echo = array();
while ($row = $fetched) {
$row_array['id'] = $row['id'];
$row_array['username'] = $row['username'];
$row_array['title'] = $row['title'];
array_push($echo, $row_array);
}
echo json_encode(array("result"=>$echo);
但是这种方法总是返回null。老实说,在这种情况下,我也不明白$row的确切作用。
你知道是什么问题吗?
谢谢你的帮助!
编辑:我得到一个空结果意味着我得到一个NullPointerException一旦我尝试访问从输入流在Android Studio的返回值第一次。错误看起来像这样:
08-26 17:17:16.605 5278-5278 E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NullPointerException
at com.example.sainz.example.RandomActivity$1LoginAsync.onPostExecute(RandomActivity.java:101)
at com.example.sainz.example.RandomActivity$1LoginAsync.onPostExecute(RandomActivity.java:40)
at android.os.AsyncTask.finish(AsyncTask.java:631)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4867)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
at dalvik.system.NativeStart.main(Native Method)
您的代码的问题是,您调用fetch
方法只有一次,而不是调用它在一个循环(每一行取一次),如:
$statement = $pdo->prepare("SELECT id, username, title FROM table");
$statement->execute();
$echo = array();
while ($row = $statement->fetch()) {
$row_array = array();
$row_array['id'] = $row['id'];
$row_array['username'] = $row['username'];
$row_array['title'] = $row['title'];
array_push($echo, $row_array);
}
$statement = null;
echo json_encode(array("result"=>$echo);
另一种选择是使用fetchAll
方法,可能使用PDO::FETCH_CLASS
,并立即完成$echo
数组对象。