使用PHP检查MySQL列中是否存在Android数组中的值,如果存在则返回记录


Checking if values in Android array exist in MySQL column with PHP, returning records if so

我是PHP的新手,我一直在研究如何使用PHP web层将数据从Android发送和接收到MySQL。我之前准备了创建Java字符串数组emailAddresses[]phoneNumbers[]的代码,它们分别包含电话联系人的所有电子邮件地址和电话号码。

我想对照MySQL表DATA检查这些值中的每一个,该表包含字段DATA_TYPE和DATA_CONTENT,它们分别将数据标识为电话号码/电子邮件地址/其他项目,并包含数据。我认为最好将数组加载到PHP中,然后循环遍历它们的每个值,看看查询是否返回记录。如果是这样,那么我想将data中与该电话号码/电子邮件地址的用户相关的所有其他数据构建成Android的JSON响应,稍后它将使用该响应将数据复制到自己的SQLite DB中。

不过,我不确定如何最好地处理PHP的输入和输出。我看到的大多数示例都涉及使用HTTPPOST将NameValuePairs设置为实体,但这些示例似乎也只是将它们用作识别或复制单个记录中的数据的参数,例如用于登录,而我希望传递大量相同类型的数据(电子邮件/电话)来识别大量记录。我认为这可能是将密钥指定为"email[1]"的情况,"someone@somewhere.com"电子邮件[2]","another@somewhere.com"但由于我是PHP的新手,我不确定这会有多高效,尤其是有100个左右的地址。我很感激在我的新愤怒中得到一些指导,谢谢。

首先,如果需要传递大量数据,无论格式如何,都会很慢。"太慢"的程度取决于您的特定应用程序及其要求。您应该在AsyncTask或其他非UI线程中执行所有HTTP通信,以保持UI响应。显示进度对话框,即使是不确定的对话框,也是向用户显示正在发生的事情的好方法

现在,针对您的具体问题。我建议创建一个字符串的JSON数组进行检查。这将实质上为您提供一个包含所有数据的字符串。将此字符串设置为具有所需名称的NameValuePair的值,并将此NameValuePair作为HTTPPost实体传递给服务器。然后在您的PHP中,您可以简单地执行:$valuesToCheck = json_decode($_POST['name'])-并且在$valuesToCheck变量中有一个数组。

现在你可以在PHP中做任何你需要做的事情,并在PHP中获得你的数据,例如,你可以得到一个数组数组,比如$dataToSend是一个数组,其中每个元素都是调用mysql_fetch_assoc的结果,或者任何其他方式。一旦你有了这些数据,只需在PHP:中这样做

header("Content-type: text/json");
echo json_encode($dataToSend);

这将把你的所有数据发送回你的呼叫代码(在这种情况下是Android)。最后,在Android中,获取响应并用JSON对其进行解码。如果返回一个空数组,则数据库中没有匹配项。如果数组不是空的,那么你就得到了你的数据,并用它做任何你需要的事情

有很多博客/教程等。关于在Android中编码/解码JSON。例如,你可以参考这个。