Нужна помощь в возвращении массива всего в таблице базы данных PHP / PDO - PullRequest
0 голосов
/ 15 декабря 2011

Я хочу вернуть массив всего найденного в таблице базы данных.В таблице только 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 ()), а не все строки.Почему это так?

Ответы [ 3 ]

2 голосов
/ 15 декабря 2011

Посмотрите пример на странице справки для запроса .В цикле foreach создайте свой массив:

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

Не используйте 2 запроса для чего-то столь простого.

Ваш отредактированный код очень близок.Просто измените fetch на fetchAll, а затем измените массив так, как вам нужно.

0 голосов
/ 15 декабря 2011

Как насчет этого?:

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

Просто на заметку: опасность здесь в том, что у вас есть повторяющиеся значения id.

0 голосов
/ 15 декабря 2011

Вы можете запустить 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);
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...