【问题标题】:SQL statement stores all results in first item of arraySQL 语句将所有结果存储在数组的第一项中
【发布时间】:2019-08-02 04:38:05
【问题描述】:

我正在运行一个 select 语句,它将字段“task_name”的多个项目从包含匹配“用户名”字段的记录中返回到上面称为“$user_log”的 PHP 变量。

$sql_task = "SELECT task_name FROM task_log WHERE username = '$user_log' ORDER BY task_id ";
$task_result = mysqli_query($link, $sql_task);

while ($row = mysqli_fetch_array($task_result)) {
print_r($row);}

现在该语句可以正常工作并返回正确的数据,但它会将所有项目返回并将它们存储在数组的第一个槽中,而不是每个项目都位于单独的槽中。

使用 print_r,我可以看到数组的内容。仅使用 echo,它将它们全部显示为一个字符串,中间没有空格。

When run with print_r

task_log table

想要从表中调用所有 matt_smith 'task_name' 数据项。并且能够参考每一个。

如果有人可以帮助我将每个项目放在数组中的单独插槽中,或者只是一种调用单个项目的方法(id 不起作用,因为它们没有统一的 id;其他用户记录),那就太好了介于两者之间)。

【问题讨论】:

标签: php sql mysqli


【解决方案1】:

你可以试试

while($row = $task_result->fetch_assoc())
{
     print_r($row);
}

【讨论】:

    【解决方案2】:

    您需要将每个项目保存在一个数组中,然后以您想要的方式使用该数组。以下是您需要更新的内容:

    $sql_task = "SELECT task_name FROM task_log WHERE username = '$user_log' ORDER BY task_id ";
    $task_result = mysqli_query($link, $sql_task);
    
    $tasks = array(); // array to store all the task names
    while ($row = mysqli_fetch_assoc($task_result)) {
         $tasks[] = $row['task_name'];
    }
    print_r($tasks); // to print array items
    

    要访问数组项,您可以简单地使用echo $tasks[0];echo $tasks[1]; 等等...

    注意:

    mysqli_fetch_array() 有第二个参数 $resulttype 和选项是:

    MYSQLI_ASSOC、MYSQLI_NUM 或 MYSQLI_BOTH。

    含义:

    MYSQLI_ASSOC:获取关联数组

    MYSQLI_NUM:获取一个数值数组

    MYSQLI_BOTH:同时获取关联数组和数值数组。

    MYSQLI_BOTH 是默认。如果我们不提供第二个参数,则将考虑 MYSQLI_BOTH。

    因此,您可以选择以下三种中的任何一种来避免响应中的值加倍。 mysqli_fetch_array(MYSQLI_ASSOC) 或 mysqli_fetch_array(MYSQLI_NUM) 或 mysqli_fetch_assoc($task_result)

    此外,代码可读性方面,使用关联数组即$row['task_name']$row[0](数字数组)更容易理解

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2015-09-01
      • 1970-01-01
      • 2014-08-02
      • 2017-02-17
      • 2021-08-04
      • 2017-02-02
      • 1970-01-01
      • 2021-05-24
      • 2017-02-17
      相关资源
      最近更新 更多