#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. Нет,
Ответ №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