Intereting Posts
PHP – как определить, если выходная буферизация включена Сессия работает правильно в Localhost, но не в CPANEL Как закрыть файл excel в php-excel-reader Guzzle: загрузка параллельных файлов с использованием пула Guzzle: опция пакетной () и `sink` Index.php как пользовательская страница ошибки очистка переменных $ _POST Класс PHPUnit_Framework_TestCase недоступен. Исправить … – Makegood, Eclipse Можно ли разместить глистов-бутстрапов внутри {{Form :: submit ('')}} – Laravel написать запрос на удаление для следующего в zend framework Как определить переменную в JavaScript с помощью функции эха PHP? Как создать метод, который вызывается каждый раз при вызове публичного метода? Как делать многострочные комментарии в NetBeans без автоматического форматирования DocBlock? Как создать уникальные переменные URL, которые соответствуют записи db? PHP Замените символы umlaut для анализа XML; несколько методов не работают Преобразование HTML в файл PHP в файл PDF

Могу ли я просто выбрать один столбец в MYSQL вместо всех, чтобы сделать его быстрее?

Я хочу сделать что-то вроде этого:

$query=mysql_query("SELECT userid FROM users WHERE username='$username'"); $the_user_id= ..... 

Потому что все, что я хочу, это идентификатор пользователя, который соответствует имени пользователя.

Обычный способ:

 $query=mysql_query("SELECT * FROM users WHERE username='$username'"); while ($row = mysql_fetch_assoc($query)) $the_user_id= $row['userid']; 

Но есть ли что-то более эффективное, чем это? Большое спасибо, привет

Solutions Collecting From Web of "Могу ли я просто выбрать один столбец в MYSQL вместо всех, чтобы сделать его быстрее?"

Вы попали в гвоздь прямо на голове: что вы хотите сделать, это SELECT userid FROM users WHERE username='$username' . Попробуй – это сработает 🙂

SELECT * почти всегда плохая идея; гораздо лучше указать имена столбцов, которые вы хотите вернуть MySQL. Конечно, вам понадобится использовать mysql_fetch_assoc или что-то подобное, чтобы фактически получить данные в PHP-переменную, но, по крайней мере, это экономит MySQL накладные расходы на отправку всех этих столбцов, которые вы не будете использовать в любом случае.

В стороне, вы можете использовать новую библиотеку mysqli или PDO. Они также намного эффективнее старой библиотеки mysql, которая устарела.

«Обычным» способом является только выбор столбцов, которые вам нужны.

Любой столбец, который является частью выбора и не нужен, замедлит поиск. Частично из-за сетевого трафика и отчасти потому, что механизм базы данных может применять определенные оптимизации, если выбраны только некоторые столбцы.

И select * как правило, недооценивается в производственном коде.

Ваш запрос верен:

 $query = mysql_query("SELECT userid FROM users WHERE username='$username'"); 

Это будет работать, если все будет сделано правильно . Обратите внимание, что $username должно быть правильно экранировано с помощью mysql_real_escape_string . Я бы рекомендовал посмотреть параметризованные запросы, чтобы уменьшить риск внедрения неуязвимости SQL-инъекций.

Еще одна вещь, которую вы можете изменить, – это использовать mysql_result вместо вашего цикла:

 $the_user_id = mysql_result($result, 0); 

Это предполагает, что вы знаете, что получите только одну строку.

Ты не только можешь, но и должен. К сожалению, слишком много молодых разработчиков привыкли выбирать слишком много данных. После запуска запроса вам не нужно делать цикл while, поскольку у вас есть только одна запись. Вместо этого просто используйте следующее:

 $sql = sprintf( "SELECT userid FROM users WHERE username = '%s'", $username ); $result = mysql_query( $sql ) or die( mysql_error() ); $data = mysql_result( $result, 0 ); if ( $data ) echo $data; // first userid returned 

Второй параметр mysql_result() – это индекс строки, который вы хотите получить. 0 – первое.

Да, это отличная практика оптимизации!

Кроме того, если вы хотите сделать еще один шаг и сделать его супер-оптимизированным, попробуйте добавить LIMIT, например: $query=mysql_query("SELECT userid FROM users WHERE username='$username' LIMIT 1");

Это, конечно, предполагает, что вы ожидаете возвращения только одного идентификатора пользователя и заставит механизм базы данных остановиться, как только он ее найдет.

Но самое главное: ВСЕГДА ВЫБРАТЬ / САНИТАТЬ ВАШИ ВХОДНЫЕ ДАННЫЕ ! (не может этого достаточно подчеркнуть)

Вы можете сделать это с помощью одной строки кода

 echo array_values(mysqli_fetch_array($mysqli->query("SELECT name FROM user WHERE id='$userid'")))[0]; 

Вы должны подключиться к базе данных, как показано ниже, прежде чем использовать эту

  $mysqli = new mysqli('HOST', 'USERNAME', 'PASSWORD', 'DATABASE'); 

Кредиты для @samuel t thomas