Какая разница между
$query = "SELECT email FROM users WHERE username='$username' ";
$result = mysqli_query($db, $query);
$row = mysqli_fetch_array($result);
$email = $row['email'];
$_SESSION['email'] = $email;
а также
$query = "SELECT * FROM users WHERE username='$username' ";
$result = mysqli_query($db, $query);
$row = mysqli_fetch_array($result);
$email = $row['email'];
$_SESSION['email'] = $email;
Они оба возвращают одинаковое значение, есть ли более эффективный способ сделать это?
select *
будет возвращать значения для всех столбцов в таблице, у которых есть строки, соответствующие вашему предикату, тогда как select column_name
будет возвращать значения только в столбце column_name
для строк, соответствующих вашему предикату.
SELECT column
возвращает только значение этого столбца. SELECT *
возвращает значение каждого столбца в таблице. Если бы вы использовали print_r($row)
в своем втором блоке кода, вы увидели бы гораздо больше элементов в массиве, чем просто $row['email']
.
Существует хороший Q & здесь, который говорит об относительных различиях производительности SELECT *
и SELECT column
. @Uueerdo указывает на одно из других полей с огромным blob, вызывающим проблемы с производительностью, также очень актуально.
Вы также можете столкнуться с проблемами с SELECT *
когда вы используете таблицы JOIN
IN, если обе таблицы имеют одинаково названные столбцы, тогда значения из одной таблицы могут перезаписывать другую, когда данные возвращаются в структуру приложения.
*
является наименее эффективным, если вы хотите только email
потому что вы возвращаете каждое значение столбца.
Вы также должны параметризовать свой запрос.
$query = "SELECT email FROM users WHERE username= ? ";
http://php.net/manual/en/mysqli.quickstart.prepared-statements.php
users
было большое поле большого двоичного объекта, в котором хранилось изображение профиля с высоким разрешением.SELECT *
, и вы будете делать это хорошо.