Я хотел бы знать, в чем разница между fetch и fetchall в php, из того, что я там видел, fetch возвращает одно поле, а fetchall все поля, но при использовании PDO мне кажется, что не имеет значения, какой из них вы используете, Я полностью использую его (PDO:: FETCH_ASSOC), но все же хотел бы знать разницу, спасибо :)
В вопросе смешаны две разные вещи:
fetch
открывается как указатель, готовый перебирать данные один за другим (обычно через цикл
while
). Это рекомендуемый метод, когда ожидается большое количество данных, потому что таким образом у вас не будет проблем с памятью.Пример кода:
Здесь
$datos
это будет ассоциативный массив, который будет заполняться строкой каждый раз, когда указатель перемещается внутриwhile
.Также данные можно распечатать на месте , если нет необходимости перевозить их в другое место:
fetchAll
извлекает все данные сразу , не открывая никаких указателей, сохраняя их в массиве. Рекомендуется, если не ожидается слишком много результатов, которые могут вызвать проблемы с памятью при попытке одновременно сохранить тысячи или миллионы строк в массиве! исходя
SELECT
изПример кода:
В данном случае это
$resultado
ассоциативный массив со всеми данными запроса. Если вы хотите прочитать строки в нем, вы можете реализовать цикл, который проходит через массив:Это почти то же самое, что и в
fetch
, только здесь мы действуем не на обход данных по указателю, а на уже хранящиеся в переменной данные. Если, например, перед этим мы закроем оператор, у нас уже есть данные,$resultado
и мы можем их прочитать. Еслиfetch
мы закроем оператор, мы не сможем прочитать данные.Глядя на
PDO::FETCH_ASSOC
это просто способ представления данных. Один изfetch_style
существующих, который указывает, что вы хотите получить результаты в виде ассоциативного массива, где ключом является имя каждого столбца, а значением являются данные, принадлежащие этому столбцу. Вы можете использовать его как с, такfetch
и сfetchAll
.Следует отметить, что как для, так
fetch
и дляfetchAll
стиля по умолчанию используетсяPDO::FETCH_BOTH
. Но вы можете установить стиль по умолчанию для объекта соединения, используя методsetAttribute
, изменяя значение константыPDO::ATTR_DEFAULT_FETCH_MODE
; быть к конкретному оператору с использованиемsetFechMode
.