如何从While语句中获取多个变量?

问题描述

我需要从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
      } 
}

解决方法

如果使用的是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'语法。

,

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

/// assign inside while loop
$tags[] = $row->tag;

// use variables outside the loop
list($tag1,$tag2,$tag3) = $tags;
,

将结果放入关联数组

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

然后使用解压缩获取变量。

extract($array);