如何通过PHP将数据从PostgreSQL发送到Android?

时间:2016-08-26 14:43:42

标签: php android postgresql

我正在开发一个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)

1 个答案:

答案 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数组对象。