首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用循环PHP语句从mysql获取数据到ios?

问如何使用循环PHP语句从mysql获取数据到ios?
EN

Stack Overflow用户
提问于 2019-01-26 09:01:23
回答 1查看 123关注 0票数 0

我的系统由三个组件组成。

ios - php - mysql

如果ios用户选择多个id,

然后,ios应用程序将所选的“id”请求发送给服务器,

并且,服务器根据MySQL中选定的id查找数据。

最后,服务器将这些数据传递给ios应用程序。

这些是我尝试过的PHP语句。

代码语言:javascript
复制
<?php


    $id_0 = $_POST['0'];
    $id_1 = $_POST['1'];
    $id_2 = $_POST['2'];
    $id_3 = $_POST['3'];
    ...
    $id_n = $_POST['n'];

    $conn = mysqli_connect('address', 'user', 'password', 'database');
    $sql = "SELECT * FROM firstname WHERE id = '$id_0'";

    if ($result = mysqli_query($conn, $sql)) {

    $resultArray = array();
    $tempArray = array();

    while($row = $result->fetch_object()) {
       $tempArray = $row;
       array_push($resultArray, $tempArray);
     }

     } else {

     }

     mysqli_close($conn);


?>

为了获得多个'id‘数据,我发现我需要使用循环语句。

但问题是,所选id的数目是可变的。

我认为在这段代码中,我需要两个循环语句。

  1. 获得基于多个id的多个数据(id的数量是可变的)
  2. 将这些数据附加到数组中

当范围未定义时,我不知道如何使用循环语句。

如何在PHP中使用循环语句,以及如何重新排列这些代码?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-26 10:37:52

我肯定这个问题是重复的,但我找不到确切的来源。

当前的方法意味着您需要为每次迭代运行一个完整的MySQL查询。

因此,由于查询结果永远不会更改迭代所包含的内容;因此,您可以简单地对其进行重新处理,以便使用IN一次加载所有变量:

步骤1)接受所有的值并将它们放在一个数组中。

代码语言:javascript
复制
$new = []; //new array
foreach ($_POST as $key=>$id){
        // Check it is a numeric key
        // Check id value is valid to avoid importing other POST values 
        if((int)$key == $key && (int)$id == $id){
             $new[] = $id;
        }
}

上面的代码块是nessecary的,以停止使用来自$_POST['button']或其他不应该包含的已发布数据的值。如果可以澄清发布的数据,例如将所有id保存到$_POST['id']数组本身,则可以删除此步骤。

步骤2)空/空或重复值的数组。

代码语言:javascript
复制
$new = array_unique($new); 

步骤3)在SQL中将数组转换为字符串

代码语言:javascript
复制
$arrayString = implode(',',$new);

步骤4)将字符串插入SQL子句:

代码语言:javascript
复制
$sql = "SELECT * FROM firstname WHERE id IN (" . $arrayString . ") ORDER BY id";

简化和减少:

代码语言:javascript
复制
$new = []; //new array
foreach ($_POST as $key=>$id){
        if((int)$key == $key && (int)$id == $id){
             $new[] = $id;
        }
}
$new = array_unique($new);
$sql = "SELECT * FROM firstname WHERE id IN (" .
         implode(',',$new) . ") ORDER BY id";

上面的SQL查询将为您提供一个数组,每个数组都有一个不同的行。您可以按需要对它们进行排序,并在PHP中输出它们。

另见:这个问答。

但

正如其他人所表达的那样,您真的、真的应该使用用MySQLi准备的报表。

也请参阅这里、这里和这里,以进一步了解如何使用来完成它,以及为什么要这样做,。

顶级技巧:

  • MySQL中的数值列(典型的MySQL列)不需要'引号。
  • 在使用准备好的语句之前,可以将变量排版为整数((int)$var),以限制风险。
  • 最好指定您需要的列,而不是使用* catch-all。
  • 您的$_POST数据应该是一个数组$_POST['ids'][...]。
  • 每天吃五块不同的水果或蔬菜。
  • 永远不要相信用户的输入!
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54377003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档