#php #mysql #database #row #fetch
#php #mysql #База данных #строка #выборка
Вопрос:
У меня есть оператор mysql, который захватывает только одну запись на основе идентификатора. Я хочу знать, лучше ли использовать mysql_fetch_row или что-то в этом роде, чем использовать что-то вроде mysql_fetch_array, просто для захвата одной строки в базе данных.
Может показаться, что использовать mysql_fetch_row имеет здравый смысл, но я просто хочу убедиться.
Комментарии:
1. В чем причина беспокойства при выборе между двумя? ускорение на 73 микросекунды? Если вы просто выбираете между выборкой ассоциативных и численно индексированных массивов, просто используйте тот, с которым проще работать.
Ответ №1:
Важно отметить, что использование
mysql_fetch_array()
не
значительно медленнее, чем использованиеmysql_fetch_row()
, в то время как это обеспечивает значительную добавленную стоимость.
Ответ №2:
почему бы вам просто не использовать LIMIT 1
внутри инструкции mysql и независимо от того, что у вас будет одна строка.
Комментарии:
1. Предположительно, если он знает
id
, то его запрос уже выглядит какWHERE id = 'foo'
2. @Bacon какое это имеет отношение к
limit 1
?3. Я думаю, что Bacon Bits предполагает, что
id
является уникальным, что, похоже, так и есть.4. @Wiseguy, какое отношение это имеет к id??? оператору нужна только 1-я строка, так что это не имеет значения…
5. Этот комментарий касался вашего вопроса о комментарии @Bacon Bits, а не вашего ответа. Перефразировано выше.
Ответ №3:
Две функции почти идентичны, название просто заставляет вас думать, что они разные:
$r=mysql_query('SELECT name,email FROM tbl LIMIT 1');
var_dump(mysql_fetch_assoc($r));
// array('name'=>[dbName], 'email'=>[dbEmail]);
var_dump(mysql_fetch_row($r));
// array([dbName], [dbEmail]);
// It's a normal incremental integer index array
var_dump(mysql_fetch_array($r,MYSQL_ASSOC));
// same as mysql_fetch_assoc();
var_dump(mysql_fetch_array($r,MYSQL_NUM));
// same as mysql_fetch_row();
var_dump(mysql_fetch_array($r,MYSQL_BOTH));
// array(0=>[dbName], 1=>[dbEmail], 'name'=>[dbName], 'email'=>[dbEmail]);
В руководстве также предлагается, чтобы с точки зрения производительности две функции работали хорошо. Локальные тесты подсказывают в том же направлении. Я бы посоветовал вам не беспокоиться о сэкономленном времени / памяти 0,0001 и найти настоящие узкие места в ваших приложениях.