Внутри нет большой разницы. И порядковые позиции, и имена столбцов доступны в метаданных набора результатов в клиентском API MySQL, независимо от этого.
Что касается использования, оба могут быть полезны в различных обстоятельствах. Ссылка на столбцы по имени является более мнемонической, приводит к (полу) самодокументированному коду, позволяет изменять позицию или количество столбцов в запросе, не нарушая код и т. Д.
Но выборка по порядковому номеру иногда бывает слишком ручной. Например:
SELECT u.name, d.name FROM user u JOIN department d USING (dept_id)
Теперь у вас есть два столбца с одинаковым именем в наборе результатов. Если вы выбираете ассоциативный массив, один перезаписывает другой, потому что ассоциированный массив может иметь только одно значение на ключ. Итак, $row["name"]
- это одно из имен, и вы не обязательно знаете, каким оно будет.
SELECT d.name, COUNT(*) FROM user u JOIN department d USING (dept_id) GROUP BY dept_id
Теперь у вас есть столбец, у которого нет псевдонима, и в зависимости от используемой вами марки СУБД он может автоматически придумать смешной псевдоним или просто использовать целое выражение в качестве ключа для массива Assoc. Так что в этом случае приятно иметь возможность использовать порядковый номер вместо имени столбца.
(Забавно, что мой стиль письма становится более неформальным и разговорчивым, когда я слушаю подкаст StackOverflow во время записи.)