【发布时间】:2018-02-28 07:19:25
【问题描述】:
我得到一列的内容,该列的内容存储为 3,2,然后我使用explode 函数将它们分开。然后将分隔的值用于查询另一个表以获取名称。接下来我想对结果进行内爆,比如汉堡、薯条。但是结果不是用逗号分隔而是像汉堡薯条一样...这是我所做的:
$sql = "SELECT items FROM orders";
$result = mysqli_query($connection, $sql);
$array = mysqli_fetch_assoc($result);
$exploded = explode(",", $array['items']);
foreach ($exploded as $row){
$query = "SELECT food_name FROM foodlist WHERE food_id = $row";
$res = mysqli_query($connection, $query);
$arr = mysqli_fetch_assoc($res);
$imploded = implode(", ", $arr);
echo $imploded;
}
【问题讨论】:
-
您正在循环内爆单个项目。您需要在循环之外构建和内爆列表。根据您的描述,您实际上可以通过一个查询来实现这一点。如果您发布表格,并附上示例数据,我可以向您展示。
-
警告:当使用
mysqli时,您应该使用parameterized queries 和bind_param将用户数据添加到您的查询中。 请勿使用字符串插值或连接来完成此操作,因为您创建了严重的SQL injection bug。 切勿将$_POST、$_GET或任何用户数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。 -
注意:
mysqli的面向对象接口明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的mysql_query接口混淆。在您对程序风格投入过多之前,值得转换一下。示例:$db = new mysqli(…)和$db->prepare("…")程序接口是 PHP 4 时代引入的mysqliAPI 的产物,不应在新代码中使用。 -
implode(', '...)只有一个列/元素要内爆,所以你永远看不到你的分隔符。