【问题标题】:How to get multiple variables from a While Statement?如何从 While 语句中获取多个变量?
【发布时间】:2020-11-30 13:10:24
【问题描述】:

我需要从 Mysql 数据库中获取 1 到 3 个标签。然后我想将每个标签分配给一个变量。有人知道我该怎么做吗?这是代码

$findTag1= "SELECT tagid FROM entitytag WHERE audioid = '$audioid'";    
$findTag1Result = $link->query($findTag1);

if ($findTag1Result->num_rows >= 0) {     
while($row = $findTag1Result->fetch_assoc()) {
          //Assign each tag to a variable
      } 
}

【问题讨论】:

  • 将它们存储在一个数组中。在你的循环之前声明$tags = [];,然后在里面做$tags[] = $row['tagid'];。然后你把它们都放在你的 $tags 变量中。不要对使用“变量”有任何想法,它们会回来咬你。使用数组。
  • 假设从数据库中获取的标签数量是未知的,从它们创建命名变量是不好的做法。尽管您可以像@my_name_is_njuno 使用extract() 函数显示的那样做到这一点,但绝对更好将它们保存在关联数组中,正如他在答案的第一部分中所示,然后迭代该数组以使用它的数据。

标签: php arrays variables mysqli


【解决方案1】:

如果您使用的是 mysqli,那么您可以使用 fetch_all()array_column() 执行此操作。这将生成一个数组,其中每个元素都是来自数据库的标签。如果您使用 PDO 会容易得多,我强烈建议您在不太晚的情况下进行切换。

要使用 mysqli 执行此操作,您可以这样做:

$stmt = $mysqli->prepare(
    'SELECT tagid 
    FROM entitytag 
    WHERE audioid = ? 
    ORDER BY tagid 
    LIMIT 3'
);
$stmt->bind_param('s', $audioid);
$stmt->execute();
$tags = array_column($stmt->get_result()->fetch_all(), 0);

// Either loop on all 3 tags assigning each to a variable
foreach ($tags as $tag) {
    echo $tag;
}
// or access each one via its index. 0 = first tag, 1 = second tag, 2 = third tag
echo $tags[1] ?? 'No tag!';

您可以通过使用数字索引在数组上循环访问数组变量中的元素。如果您决定使用索引,请确保提供默认值,以防数组中的标签少于 3 个。使用?? 'default' 语法。

【讨论】:

    【解决方案2】:

    这可行,但不确定您将如何预测您将拥有的变量数量,我仍然更喜欢坚持使用数组而不将其内容提取到变量中。

    /// assign inside while loop
    $tags[] = $row->tag;
    
    // use variables outside the loop
    list($tag1, $tag2, $tag3) = $tags;
    

    【讨论】:

    • 你确定会有3个标签吗?
    【解决方案3】:

    将结果放入关联数组中

    $array = []; 
    $i = 1;
    while($row=findTag1Result->fetch_assoc()) {
        $array['tag' . $i] = $row;
        $i++;
    }
    

    然后使用 extract 获取您的变量。

    extract($array);
    

    【讨论】:

    • 这听起来合乎逻辑,但是我不会将其提取到变量中,而是使用$array 即。在foreach 循环中迭代它。
    猜你喜欢
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 2014-11-13
    • 1970-01-01
    相关资源
    最近更新 更多