В чем разница между SELECT * и значением SELECT - PullRequest
0 голосов
/ 19 сентября 2018

В чем разница между

    $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;

Они оба возвращают одно и то же значение, есть ли более эффективный способ сделать это?

Ответы [ 4 ]

0 голосов
/ 19 сентября 2018
  • Выбирает все, что означает, что он вернет все столбцы, но «выбрать электронную почту» вернет столбец «электронная почта», что более эффективно.Вы также можете выбрать много столбцов, таких как: «выберите идентификатор, электронная почта от пользователей».
0 голосов
/ 19 сентября 2018

* наименее эффективен, если вы хотите только email, потому что вы возвращаете значение каждого столбца.

Вы также должны параметризовать свой запрос.

$query = "SELECT email FROM users WHERE username= ? ";

http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

0 голосов
/ 19 сентября 2018

SELECT column возвращает только значение этого столбца.SELECT * возвращает значение каждого столбца в таблице.Если бы вы были print_r($row) во втором блоке кода, вы бы увидели намного больше элементов в массиве, чем просто $row['email'].

. Здесь есть хорошие вопросы и ответы , в которых говорится оОтносительные различия производительности SELECT * и SELECT column.Замечание @ Uueerdo о том, что в одном из других полей имеется огромный блоб, вызывающий проблемы с производительностью, также очень справедливо.

Вы также можете столкнуться с проблемами с SELECT * при использовании таблиц JOIN, если обе таблицы имеютстолбцы с одинаковыми именами, тогда значения из одной таблицы могут перезаписывать другую, когда данные возвращаются в среду вашего приложения.

0 голосов
/ 19 сентября 2018

select * вернет значения для всех столбцов таблицы, в которых есть строки, соответствующие вашему предикату, а select column_name вернет значения только в столбце column_name для строк, соответствующих вашему предикату.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...