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


How to send data from PostgreSQL to Android via PHP?

我正在开发一个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数组对象。