【问题标题】:Need help returning an array of everything in a table of a database PHP/PDO需要帮助返回数据库 PHP/PDO 表中所有内容的数组
【发布时间】:2011-12-15 02:58:05
【问题描述】:

我想返回在数据库表中找到的所有内容的数组。该表只有 2 列:id 和 song_url。我希望数组看起来像这样:

Array {
    1 => songurl1,
    2 => songurl2,
    3 => songurl3
}

键是每一行的id,值是每一行的song_url。我正在为此使用 PDO。

谢谢。

编辑(没有看到编辑按钮:s):

这是我目前执行此操作的代码:

class Database {

protected $connected = false;
protected $dbh = null;
public $test = array();

function __construct($host=null, $user=null, $pass=null, $db=null) {
    if ($host && $user && $pass && $db) {
        try {
            $this->dbh = new PDO("mysql:host=$host;dbname=$db", $user, $pass);
            $this->connected = true;
        } catch (PDOException $e) {
            echo "Could not connect to the database. Please contact an administrator.";
            $this->connected = false;
            exit();
        }
    } else {
        echo "No or not all variables are passed to the constructer. Contact an administrator.";
        $this->connected = false;
        exit();
    }
}

public function fetchAllSongs() {
    $q = $this->dbh->query("SELECT * FROM song_directories");
    $result = $q->fetch(PDO::FETCH_ASSOC);

    return $result; // this returns an array, yes, but only 1 row

}

}

此外,fetchAllSongs 中的返回仅显示一行(当我使用 print_r() 时),而不是所有行。这是为什么呢?

【问题讨论】:

  • 不费吹灰之力就发布您想要的内容似乎很可疑,就像您要求我们为您完成工作一样。我们通常希望人们尝试自己解决问题,并且只有在他们真正遇到问题时才发布问题。
  • 是的,抱歉,我编辑了我的问题。到目前为止,我还没有尝试过任何事情,但我怀疑我可以尝试 Paul 的回答。我没有太多时间在这方面做更多的工作。

标签: php mysql arrays pdo


【解决方案1】:

查看manual page for query 上的示例。在 foreach 循环中创建你的数组:

$data[$row['id']] = $row['songurl'];

不要对这么简单的事情使用 2 个查询。

您编辑的代码非常接近。只需将fetch 更改为fetchAll,然后根据需要重新排列数组。

【讨论】:

  • 谢谢。这是一个非常简短和简单的解决方案,并且可以完美运行。我还在学习一些概念,所以我会把这个添加到我的库中!
【解决方案2】:

您可以运行 2 个查询(每列一个),然后使用 array_combine 创建您想要的数组。

<?php
/*
$column_id       = // Get the ID column
$column_song_url = // Get the song_url column
*/

$result = array_combine($column_id, $column_song_url);
?>

【讨论】:

  • 但这不是不必要的开销吗?
  • @Nonym - 是的,但我不相信没有一些开销就可以解决您的问题。不过我必须承认,循环遍历结果(正如其他人所建议的那样)可能是更好的解决方案。
【解决方案3】:

这个怎么样?

$testArray = array();
for ($i = 0; $i<=count($rsArr)-1;$i++) {
    $testArray[$rsArr[$i]->id] = $rsArr[$i]->song_url;
}

请注意:这里的危险是如果您有任何重复的 id 值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多