Заметил небольшую проблему в синтаксисе 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