2016-11-22 4 views
-1

Сегодня я пьян. Я пишу неправильный код, как это.

$sql = "SELECT id, firstname, lastname, status FROM MyGuests"; 
$result = $conn->query($sql); 

    while($row = $result->fetch_assoc()) { 
     if($row['status'] == 'Active') { 
     echo "<br> id: ". $row["id"]. " - Name: ". $row["firstname"]. " " . $row["lastname"] . "<br>"; 
    } 
} 

и он работает как SELECT WHERE status = 'Active'. Это не имеет смысла для меня, почему это работает?

Я думаю, что если инструкция просто проверит один столбец, а не относительно этого столбца всех строк. Это не должно работать.

+0

В чем проблема? –

+0

Почему это работает? – tuchawat

+0

Вы извлекаете все записи из таблицы базы данных ... все из них ... затем в цикле 'while' вы проверяете строку за строкой, если некоторые из полей соответствуют определенному условию ... если это так, вы печатаете результат ... но, как я уже говорил, вы просматриваете все свои записи (строка за строкой, aye aye!) – Hackerman

ответ

3

Разница заключается в том:

  1. if($row['status'] == 'Active') { Здесь вы приносите все записи таблицы из БД в приложении, и сделать фильтр на стороне клиента. Таким образом, это имеет стоимость исполнения при транспортировке всех данных.

  2. WHERE status= 'Active' Сделайте фильтр в db и отправляйте только соответствующие данные, поэтому он более эффективен.

0

синтаксиса для соответствующего оператора в РНР == (или ===)

как в коде

if($row['status'] == 'Active') 

синтаксис для соответствующего оператора в MySQL (или SQL) является =

как

SELECT WHERE col1 = 'Active' . 

поэтому результат эквивалентен

2

Оба они используются в php.

== Равенство $x == $y Возвращает true, если $ x и $ y имеют одинаковые пары ключ/значение.

=== Идентификатор $x === $y Возвращает true, если $ x и $ y имеют одинаковые пары ключ/значение в том же порядке и одного и того же типа.

Надеюсь, теперь ваше сомнение очистится. :-)

Смежные вопросы