我的系统由三个组件组成。
ios - php - mysql
如果ios用户选择多个id,
然后,ios应用程序将所选的“id”请求发送给服务器,
并且,服务器根据MySQL中选定的id查找数据。
最后,服务器将这些数据传递给ios应用程序。
这些是我尝试过的PHP语句。
<?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的数目是可变的。
我认为在这段代码中,我需要两个循环语句。
当范围未定义时,我不知道如何使用循环语句。
如何在PHP中使用循环语句,以及如何重新排列这些代码?
发布于 2019-01-26 10:37:52
我肯定这个问题是重复的,但我找不到确切的来源。
当前的方法意味着您需要为每次迭代运行一个完整的MySQL查询。
因此,由于查询结果永远不会更改迭代所包含的内容;因此,您可以简单地对其进行重新处理,以便使用IN一次加载所有变量:
步骤1)接受所有的值并将它们放在一个数组中。
$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)空/空或重复值的数组。
$new = array_unique($new); 步骤3)在SQL中将数组转换为字符串
$arrayString = implode(',',$new);步骤4)将字符串插入SQL子句:
$sql = "SELECT * FROM firstname WHERE id IN (" . $arrayString . ") ORDER BY id";简化和减少:
$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准备的报表。
也请参阅这里、这里和这里,以进一步了解如何使用来完成它,以及为什么要这样做,。
顶级技巧:
'引号。(int)$var),以限制风险。* catch-all。$_POST数据应该是一个数组$_POST['ids'][...]。https://stackoverflow.com/questions/54377003
复制相似问题