Far*_*ire 15 php sql arrays pdo
我有一个名为'brands'的SQL表,其中包含列id,name,url.在该表中,我有这个数据集:
1, Solidfloor, solidfloor;
2, Quickstep, quickstep;
4, Cleanfloor, cleanfloor;
5, Blue Dolphin, blue-dolphin;
6, Krono, krono;
8, Meister, meister;
Run Code Online (Sandbox Code Playgroud)
我现在正在取出它们并且我得到一个很好的数组作为回报,但是,我需要数组的索引不是递增的数字,而是该特定行的id.我当然可以遍历结果集,但有没有更简洁的方法呢?
You*_*nse 17
尽管PDO::FETCH_UNIQUEPHP手册中的描述还不清楚,但实际上它确实是您需要的参数.
$data = $pdo->query('SELECT * FROM table')->fetchAll(PDO::FETCH_UNIQUE);
Run Code Online (Sandbox Code Playgroud)
给你一个由SELECT子句中列出的字段索引的数组(当使用*然后在表定义中的第一个字段时,在你的情况下应该是id).
请注意,默认情况下使用just PDO::FETCH_UNIQUE将为您生成具有doubled值的结果行.您可以为此调用添加首选行模式,或者 - 更好的是,在构造函数或通过中为所有PDO调用设置一次setAttribute().下面的输出显示为PDO::FETCH_ASSOC设置为默认提取模式.
1 => array (
'name' => 'Solidfloor',
'url' => 'solidfloor',
),
2 => array (
'name' => 'Quickstep',
'url' => 'quickstep',
),
4 => array (
'name' => 'Cleanfloor',
'url' => 'cleanfloor',
),
)
Run Code Online (Sandbox Code Playgroud)
Thi*_*e Z 14
获取为assoc
手册:http: //php.net/manual/en/pdostatement.fetchall.php
fetch_style
控制返回数组的内容,如PDOStatement :: fetch()中所述.默认值为PDO :: ATTR_DEFAULT_FETCH_MODE(默认为PDO :: FETCH_BOTH)
要从结果集返回包含单个列的所有值的数组,请指定PDO :: FETCH_COLUMN.您可以使用column-index参数指定所需的列.
要从结果集中仅获取单个列的唯一值,请使用PDO :: FETCH_UNIQUE按位OR OR PDO :: FETCH_COLUMN.
要返回按指定列的值分组的关联数组,请按位ORO PDO :: FETCH_COLUMN与PDO :: FETCH_GROUP.
最后一点是关键.它似乎并没有被完全记录(我能找到),但不是PDO :: FETCH_COLUMN,你可以用PDO :: FETCH_GROUP结合PDO :: FETCH_ASSOC以达到预期的效果:
$PDOstmt->fetchAll(PDO::FETCH_ASSOC | PDO::FETCH_GROUP)
Run Code Online (Sandbox Code Playgroud)
所以,鉴于以上数据:
$stmt = $PDO_obj->prepare('select * from brands');
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC | PDO::FETCH_GROUP);
d($result);
Run Code Online (Sandbox Code Playgroud)
结果是:
array (6) [
'1' => array (1) [
array (2) [
'name' => string (10) "Solidfloor"
'url' => string (10) "solidfloor"
]
]
'2' => array (1) [
array (2) [
'name' => string (9) "Quickstep"
'url' => string (9) "quickstep"
]
]
'4' => array (1) [
array (2) [
'name' => string (10) "Cleanfloor"
'url' => string (10) "cleanfloor"
]
]
'5' => array (1) [
array (2) [
'name' => string (12) "Blue Dolphin"
'url' => string (12) "blue-dolphin"
]
]
'6' => array (1) [
array (2) [
'name' => string (5) "Krono"
'url' => string (5) "krono"
]
]
'8' => array (1) [
array (2) [
'name' => string (7) "Meister"
'url' => string (7) "meister"
]
]
]
Run Code Online (Sandbox Code Playgroud)
(d()只是kint库中一个方便的调试函数,比如var_dump()或print_r())
请注意,用于索引数组的列始终是结果中的第一列,因此您可以修改select语句以选择所需的列.另请注意,索引列将从每行的数组中删除; 为了解决这个问题,您可以将列添加两次到select语句(即select id, brands.* from brands等).
此处记录了更多参数:http://php.net/manual/en/pdostatement.fetch.php,与PDO :: FETCH_UNIQUE类似,以确保每个索引仅使用一次.