Синтаксис запроса PHP sql

Заметил небольшую проблему в синтаксисе SQL-запроса, вот как это происходит:

$email = "name_lastname@server.com"; $query = "Select * From Users Where email=".$email; 

Это не работает, запрос был протестирован и работает отлично, однако это существенно эволюционирует:

 Select * FROM Users WHERE email=name_lastname@server.com ; 

Это дает нулевой результат.

Чтобы выполнить его правильно, я добавляю твист к синтаксису моей переменной $ email, по существу, как:

 $email = "\"name_lastname@server.com\""; 

Как только я укажу цитаты в строковой переменной, то есть, когда она выполняется так, как ожидалось, даст желаемый результат.

Я не уверен, что это самый эстетичный способ приблизиться к синтаксису для выполнения запроса, и я думаю, что есть альтернативы. Благодарен тем, кто пролил свет на этот

Попробуйте это вместо этого:

 $query = "Select * From Users Where email='$email'"; 

Или:

 $query = sprintf("Select * From Users Where email='%s'", $email); 

Или:

Много других способов …

Строковые запросы нуждаются в одной цитате вокруг критериев поиска. Предполагая, что MySQL: http://dev.mysql.com/doc/refman/5.0/en/string-syntax.html

 $email = "name_lastname@server.com"; $email = "'" . mysql_real_escape_string($email) . "'"; $query = "Select * From Users Where email=".$email; 

не цитируемые переменные, подобные этому, будут считаны как int. Всегда указывайте все строки. вам не нужно избегать двойников, как если бы синглов хватило.

 $query = "SELECT * From Users WHERE email= '".mysql_real_escape_string($email)."'"; 

Почему бы не сделать:

  $email = "name_lastname@server.com"; $query = "Select * From Users Where email = '$email'"; 

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

 $email = "name_lastname@server.com"; $query = "Select * From Users Where email=\"".$email."\""; 

Кавычки не являются частью адреса электронной почты, они являются частью запроса. Если вы сделаете это так, у вас не будет посторонних кавычек, если вы попытаетесь использовать $email для чего-то другого, и вам не придется забывать ставить кавычки вокруг любого другого адреса электронной почты, который вы передаете в тот же запрос.

Кроме того, вы можете проверить mysqli, который обрабатывает запросы несколько иным образом и как побочный эффект, устраняет все это, обманывая ваши экраны.

PS – Я согласен с людьми, которые предложили использовать одиночные кавычки вместо скрытых двойных кавычек. Но SQL действительно принимает двойные кавычки (по крайней мере, в моей системе), поэтому я придерживался соглашения, которое вы использовали.

Лучший способ избежать проблем с цитатой – подготовить инструкцию в phpMyAdmin, а затем сгенерировать исходный запрос PHP:

 $email = "name_lastname@server.com"; $sql = 'SELECT * FROM `Users` WHERE `email` = '.$email; 

Больше информации:

http://www.packtpub.com/article/multi-table-query-generator-using-phpmyadmin-mysql