我正在开发一个Android应用程序,其中包括与PostgreSQL数据库的通信(上传和下载)。我想使用PHP脚本从数据库中检索数据。
表名为“table”,其列为“id”,“username”和“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在这种情况下的作用是什么。
你知道问题是什么吗?
非常感谢你的帮助!
编辑:我得到一个null结果意味着我第一次尝试从Android Studio中的输入流访问返回值时,我得到一个NullPointerException。 错误如下所示:
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)
答案 0 :(得分:0)
您的代码的问题在于您只调用fetch
method一次,而不是在循环中调用它(每行一次获取),如下所示:
$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
method,可能使用PDO::FETCH_CLASS
,并一次完成$echo
数组对象。