【问题标题】:For Loop not working with Array in mysql phpFor循环不能在mysql php中使用数组
【发布时间】:2020-08-07 04:54:12
【问题描述】:

我正在尝试将值从数组传递到变量中

$coode = '111,222,333';

$rollnum = explode(",", $coode);
for($x = 0; $x < count($rollnum); $x++){
  $products = $db->query("SELECT name FROM studentstb WHERE roll_no=".$rollnum[$x]."");
                       while($row = $products->fetch_assoc()){
                          $stdname =$row['name'];
                       }

}
echo($stdname);

我希望结果显示为 tolu,tulu,tala 我想将这些值放入一个变量中,分解它,检查数据库以检索它们的名称,然后显示它们。

【问题讨论】:

  • 您遇到的错误是什么?您的代码只会显示姓氏,这是您的意图吗?
  • 如果是您在其他帖子中输入的“布尔”错误消息,则表明查询无效。在 phpMyAdmin 或同等工具中测试您的查询,看看有什么问题。
  • 不,我希望结果显示为 tolu,tulu,tala
  • 那么你需要将每个结果连接到$stdname,而不是覆盖它。或者将$stdname 设为一个数组并添加到其中然后显示它。或者在循环中显示每个名称,而不是在末尾。查询现在有效吗?
  • 还是不行

标签: php html mysql arrays for-loop


【解决方案1】:

我看到两个问题,第一个是N + 1查询,第二个是在线$stdname = $row['name'];

解决方案

$codes = '1,2,3';

$sql = "SELECT name FROM users WHERE id IN ({$codes})";
$result = $mysqli -> query($sql);
$namesArr = $result->fetch_all(MYSQLI_ASSOC);

$updatedNamesArr = array_map(function ($name){
    return $name['name'];
}, $namesArr);

var_dump(implode(',', $updatedNamesArr));

输出

"Dmitry,Raf,Api"

【讨论】:

  • n+1查询问题与ORM有关,您的情况不会出现,请忽略。
【解决方案2】:

如果您正在使用,则不应为您的 PDOStatement 对象 $products 定义方法 fetch_assoc() PDO 驱动,但它是为 MySQLi 定义的。

在此处查看PDOStatement methods list,在此处查看those for MySQLi

另一方面,您的变量 $stdname 应该是一个数组,您可以在其中添加来自查询的三个值。 然后,您应该像这样调整您的 while 循环内容:

while($row = $products->fetch()){
//get the names in an array
$stdname[$x] = $row['name'];
}

最后,创建一个循环以在您方便的时候显示名称。

【讨论】:

    【解决方案3】:

    现在工作, 我忽略了查询中的单引号

     $rollnum = explode(',', $coode);
      for($x = 0; $x < count($rollnum); $x++){
        $products = $db->query("SELECT name FROM studentstb WHERE roll_no='".$rollnum[$x]."'");
        while($row = $products->fetch_assoc()){
         $stdname[$x] =$row['name'];
        }
    
    }
    

    然后我使用显示它

    foreach ($stdname as $a){
            echo $a;
    

    【讨论】:

    • 你也没有使用 $stdname 作为箭头。
    • $stdname 用作变量以显示从数据库中获取的值。
    猜你喜欢
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多