Каков наилучший способ выбрать одну строку в MySQL с помощью PHP?

#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 и найти настоящие узкие места в ваших приложениях.