|
|
|
| В документации про быстроту действия сказано лишь, что оба они работают ненамного медленнее, чем mysql_fetch_row.
Но все-таки. Что лучше использовать? Чисто логически, если мне не нужен числовой массив, надо воспользоваться первым. Но есть ли какие-то еще везкие причины использовать именно mysql_fetch_assoc, а не mysql_fetch_array (при том, что последняя функция вызывается без доп.параметров)?
По логике, запрос с mysql_fetch_array должен занимать ~в два раза больше времени, т.к. надо вернуть два массива, вместо одного. Верно ли я мыслю? | |
|
|
|
|
|
|
|
для: neadekvat
(11.10.2009 в 01:35)
| | Неправильный вопрос вы задаете. А правильный звучит так:
"Есть ли какие-то еще веские причины (помимо дополнительного числового массива) использовать именно mysql_fetch_array, а не mysql_fetch_assoc (при том, что первая функция вызывается без доп. параметров, а значит занимает ~в два раза больше памяти)" | |
|
|
|
|
|
|
|
для: Drago
(11.10.2009 в 02:45)
| | Не будьте занудой.
Если это завуалированный ответ, то не правильно вы отвечаете. А правильно ответить было бы, сказав прямо свою точку зрения и подтвердив её аргументами. | |
|
|
|
|
|
|
|
для: neadekvat
(11.10.2009 в 02:50)
| | >Не будьте занудой.
>Если это завуалированный ответ, то не правильно вы отвечаете. А правильно ответить было бы, сказав прямо свою точку зрения и подтвердив её аргументами.
Почему? Точку зрения Вы уже выразили. Подтвердите её аргументами, чтоли?
Я сейчас по поводу формулировки ответа, если что. | |
|
|
|
|
|
|
|
для: Trianon
(11.10.2009 в 09:53)
| | Не знаю, правильно ли я понял ваш вопрос..
Имеется в виду, что я не просто спросил, "вы больше любите это или это использовать", а "что лучше использовать и почему".
Мне намного больше интересно _почему_ лучше использовать ту, а не иную функцию. | |
|
|
|
|
|
|
|
для: neadekvat
(11.10.2009 в 15:12)
| | Я спросил, почему Вы решили, что отвечать, прямо излагая свою точку зрения и подтверждая её аргументами - правильнее, чем предоставить возможность оппоненту принять эту точку зрения в результате собственных размышлений? | |
|
|
|
|
|
|
|
для: Trianon
(11.10.2009 в 15:55)
| | Потому что, изложив свою точку зрения оппоненту с аргументами, мы предоставим ему возможность размышлять, оперируя, в том числе, вашими аргументами. Если у вас есть своя точка зрения, то почему я должен доказывать себе её правильность? Докажите вы мне, тем более, когда я спрашиваю вашего мнения с объяснениями, а не намеков и подсказок, коих в моей голове и так достаточно. | |
|
|
|
|
|
|
|
для: neadekvat
(11.10.2009 в 16:30)
| | Ну тут никто никому не обязан ничего доказывать. Это не платная консультация у специалиста. Каждый высказывает лишь свою точку зрения в свободной форме и не более того, так что по-моему какие-либо претензии тут не должны иметь места ;) | |
|
|
|
|
|
|
|
для: neadekvat
(11.10.2009 в 16:30)
| | Ну ... доказывать, пожалуй, ни я, ни Drago никому ничего не собирались :)
Если пищи для размышления у Вас с избытком - переваривайте :))
Могу лишь оформить свои мысли по этому поводу.
Есть вызов mysql_fetch_row .
Возвращает строго определенные данные - строку массива результата.
Ключами элементов являются номера столбцов.
Вызов хорош тем, что при строго детерминированном SELECT-запросе (т.е. без звездочек) - также является полным и строго детерминированным.
Количество элементов массива всегда соответствует количеству столбиков запроса.
Неудобен тем, что связь через номер столбика не надежнаяи и наглядная, но такая запись, как
for($res = mysql_query( "SELECT id, name, grp FROM tbl");
list( $id, $name, $grp) = mysql_fetch_row($res);)
echo "$id/$name/$grp";
| этот недостаток практически устраняет.
Есть вызов mysql_fetch_assoc .
Возвращает строго определенные данные - строку массива результата.
Ключами элементов являются имена столбцов.
Вызов хорош тем, что при строго детерминированном SELECT-запросе (т.е. без звездочек и с алиасами, исключающими неоднозначность) - также является полным и строго детерминированным.
Несколько плох тем, что количество элементов массива соответствует количеству столбиков запроса только тогда, когда нет неоднозначности полей. Иначе поля теряются.
При запросе без неоднозначностей - прекрасен жесткой связью имени столбика и ключа массива.
for($res = mysql_query( "SELECT * FROM tbl");
$row = mysql_fetch_row($res);)
echo $row['id'].'/'.$row['name'].'/'.$row['grp'];
|
Есть вызов mysql_fetch_array .
Возвращает кашу, несоответствующую никакому осмысленному набору данных, на поверку оказывающуюся помесью результатов первых двух вызовов.
Помимо этого факта сочетает в себе недостатки их обоих.
Атавистическое достоинство - работает в php3 (Вам не смешно?)
Разумного применения вне первых двух - не имеет. Пример не привести.
Как-то так. | |
|
|
|
|
|
|
|
для: Trianon
(11.10.2009 в 17:54)
| | Этого я от вас и ждал :)
Спасибо за подробный ответ. | |
|
|
|
|
|
|
|
для: neadekvat
(11.10.2009 в 01:35)
| | Функция mysql_fetch_array() возвращает по умолчанию, как ассоциативный, так и нумерованный массив(параметр MYSQL_BOTH). Не знаю конечно, как это реализовано в РНР, но по логике вещей индекс массива - это ссылка на определённый адрес памяти, то есть на одну и ту же ячейку памяти, поэтому кол-во данных одинаково, единственное что - дополнительные накладные расходы на хранение дополнительных указателей(индексов массива). При передаче других параметров (MYSQL_ASSOC или MYSQL_NUM) возвращается либо ассоциативный либо нумерованный массив. Вообще по сути говоря за несколько сотых миллисекунд стоит бороться лишь в том случае, если нагрузка на сервер большая, да и обращение к элементу ассоциативного массива требует больше времени и ресурсов, нежели обращение к нумерованному( убедиться можно с помощью профилирования кода с доастаточно большой выборкой из таблицы с 100 000 записей, к примеру ).
Это всего лишь моё ИМХО, за чистую монету не принимать. | |
|
|
|