【问题标题】:Putting MYSQL results into PHP array将MYSQL结果放入PHP数组
【发布时间】:2017-02-06 18:00:03
【问题描述】:

我在将 mysql 数据库中的数据检索到 php 数组时遇到问题。如果我执行下面的代码,查询会获取一些相应的行两次甚至 3 次。 我得到了一个列出名称和上传日期的文件数据库。 假设我有 4 个文件(经过测试): 文件 1、文件 2、文件 3、文件 4。 代码会回显(如果有帮助):

File1 and its date
File1 and its date
File4 and its date
File2 and its date
File2 and its date
File3 and its date
File3 and its date
File4 and its date
File4 and its date

代码如下:

$query = $pdo_con->query("SELECT * FROM uploads WHERE  active = 1 and owner = '$current_user' Order By upload_id DESC");

while($r = $query->fetch(PDO::FETCH_ASSOC)) {
    $new_array[] = $r;
    $new_array[$r['name']] = $r;
    $new_array[$r['uploaded']] = $r;
}
foreach($new_array as $array){
    echo $array['name'];
    echo $array['uploaded'];
}

我希望代码仅以正确的顺序回显每个文件一次(upload_id 的降序(自动递增))

【问题讨论】:

  • 您将$row 多次添加到$new_array。每行 3 次。如果您希望它显示一次,则只添加一次。此外,pdo 确实有一个 fetchAll 方法,可以将所有行放入一个数组中。
  • 如果您运行查询,您会在结果中看到多行吗?如果你没有对$new_array 做任何事情,为什么不直接回显或使用fetchAll() 并循环呢?

标签: php mysql


【解决方案1】:

您创建数组的方式是每次通过循环为您提供 3 个元素。试试:

$i;
while($r = $query->fetch(PDO::FETCH_ASSOC)) {
    $new_array[$i][$r['name']] = $r['name'];
    $new_array[$i][$r['uploaded']] = $r['uploaded'];
    $i++;
}

但是,如果您在查询中指定列,则要容易得多:

SELECT name, uploaded FROM uploads
    WHERE  active = 1 AND owner = '$current_user'
    ORDER BY upload_id DESC

然后:

$new_array = $query->fetchAll(PDO::FETCH_ASSOC);

或者,如果您不需要 $new_array 但只想显示:

while($r = $query->fetch(PDO::FETCH_ASSOC)) {
    echo $r['name'];
    echo $r['uploaded'];
}

【讨论】:

  • 谢谢!您的第二个选项解决了问题
【解决方案2】:

应该这样做:

$query = $pdo_con->query("SELECT * FROM uploads WHERE  active = 1 and owner = '$current_user' Order By upload_id DESC");

while($r = $query->fetch(PDO::FETCH_ASSOC)) {
    echo $r['name'];
    echo $r['uploaded'];
}

或者:

$query = $pdo_con->query("SELECT * FROM uploads WHERE  active = 1 and owner = '$current_user' Order By upload_id DESC");

while($r = $query->fetch(PDO::FETCH_ASSOC)) {
    $new_array[] = ['name'=>$r['name'], 'uploaded'=>$r['uploaded']];
}
foreach($new_array as $array){
    echo $array['name'];
    echo $array['uploaded'];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 2012-08-26
    • 2015-07-28
    • 2021-03-17
    相关资源
    最近更新 更多