如何让SQLite / PDO-> query()只返回命名字段?

时间:2011-10-24 23:23:22

标签: php sqlite pdo

如果我从我的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(安装了最新版本的XAMPP的PHP):

enter image description here

如何告诉PDO对象我希望它只给出命名数组,例如: “type”和“name”,但不是0和1?

2 个答案:

答案 0 :(得分:3)

PDO::query返回PDOStatement。使用PDOStatement::setFetchMode设置默认提取模式,或在结果上调用fetch时传递模式。请注意,在运行PDO::query之后,请在结果上设置获取模式,而不是在运行查询之前在PDO对象上设置。

答案 1 :(得分:0)

你可以扩展PDO类本身,所以每次使用query()方法时,setFetchMode都是你想要的:

class PDO_Ex extends PDO {

    function query($query){

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

}