Это определенное поведение для PDO. Массив (для каждой строки), возвращаемый fetch()
или fetchAll()
, содержит данные, проиндексированные по имени столбца и порядку в таблице.
Если вам не нужны результаты с числовым индексом, вы можете добавить константу PDO::FETCH_ASSOC
к вашему вызову, чтобы получить:
$stmt->fetch(PDO::FETCH_ASSOC); //Just column names and values
//OR
$stmt->fetchAll(PDO::FETCH_ASSOC);
Значением по умолчанию для этого первого параметра (который PHP.net вызывает стиль выборки) является PDO::FETCH_BOTH
, который возвращает PDO::FETCH_ASSOC
и PDO::FETCH_NUM
. С этими стилями возврата можно ознакомиться на странице документа fetch () .
Для приведенной ниже таблицы и запроса SELECT * FROM cust
:
+--+----+
|id|name|
+--+----+
|0 |John|
+--+----+
|1 |Jill|
+--+----+
Вызов $stmt->fetchAll(PDO::FETCH_ASSOC);
вернет:
array(0=>array(
'id' => 0,
'name' => 'John'
), 1=>array(
'id' => 1,
'name' => 'Jill'
));
При вызове $stmt->fetch(PDO::FETCH_NUM);
вернется:
array(0=>array(
0 => 0,
1 => 'John'
), 1=>array(
0 => 1,
1 => 'Jill'
));
Значение по умолчанию (PDO::FETCH_BOTH
), с которым вы столкнулись, возвращает комбинацию обоих. Так как это значение по умолчанию, оно используется, когда стиль не передается:
$stmt->fetch();
Или когда явно указано:
$ stmt-> выборки (PDO :: FETCH_BOTH);