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

#php #mysql

#php #mysql

Вопрос:

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

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

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

Комментарии:

1. Не уверен, в чем заключается ваш вопрос? Запрос без кавычек просто неверен и должен вызывать ошибку MySQL.

2. Не так много, чтобы смотреть.. в чем ошибки? запрос выглядит нормально, вы можете использовать косые черты.

3. в запросе mysql жала должны быть заключены в кавычки. есть много способов сделать это

4. Вам нужно заключить в кавычки любые строки, которые вы хотите использовать в качестве данных. Рассмотрите возможность использования подготовленных операторов . Это решит проблему с цитированием, а также возможность внедрения SQL.

Ответ №1:

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

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

Или:

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

Или:

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

Комментарии:

1. О, опередил меня. 1 для победы. :)

Ответ №2:

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

Комментарии:

1. В mysql разрешены двойные кавычки, но одинарные кавычки являются более стандартными.

Ответ №3:

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

Ответ №4:

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

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

Ответ №5:

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

  $email = "name_lastname@server.com";

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

Комментарии:

1. Нет, $email в кавычках, как и должно быть. MySQL не выдаст ошибку.

Ответ №6:

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

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

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

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

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

Ответ №7:

Лучший способ избежать проблем с цитатами — подготовить инструкцию в 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