Как SQLite / PDO-> query () вернуть только именованные поля? - PullRequest
0 голосов
/ 25 октября 2011

Если я получаю записи из основной таблицы базы данных SQLite, например:

$database = new PDO('sqlite:test.sqlite');
$sql = "SELECT * FROM sqlite_master";
$records = $database-> query($sql);

, тогда это дает мне удвоенное количество полей в каждой записи, как индексированных, так и ассоциативных:

type:[table]
0:[table]
name:[site_comments]
1:[site_comments]
tbl_name:[site_comments]
2:[site_comments]
rootpage:[3]
3:[3]
sql:[CREATE•TABLE•site_comments(author•varchar(50),•comment•varchar(255))]
4:[CREATE•TABLE•site_comments(author•varchar(50),•comment•varchar(255))]

Я помню, как использовал объект PDO много лет назад, и было fetchAll() и соавт.методы, которые вы определили так, как вы определили, хотите ли вы оба - ассоциативные или индексированные поля, или одно, или другое, и т. д. Но, похоже, это новая / другая версия PDO (PHP установлен с самой новой версией XAMPP):

enter image description here

Как мне сообщить объекту PDO, что я хочу, чтобы он давал мне только именованные массивы, например, "тип" и "имя", но не 0 и 1?

Ответы [ 2 ]

3 голосов
/ 25 октября 2011

PDO::query возвращает PDOStatement. Используйте PDOStatement::setFetchMode для установки режима выборки по умолчанию или переходите в режим при вызове fetch для результата. Обратите внимание, что вы устанавливаете режим выборки для результата после выполнения PDO::query, а не для объекта PDO до выполнения запроса.

0 голосов
/ 29 мая 2014

Вы можете расширить сам класс PDO, чтобы каждый раз, когда вы используете метод query (), он устанавливалFetchMode так, как вы хотите:

class PDO_Ex extends PDO {

    function query($query){

        $statement = parent::query($query);
        $statement->setFetchMode(PDO::FETCH_ASSOC);
        return $statement;
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...