PHP – одинарные кавычки или двойные кавычки вокруг SQL-запроса?

Существуют ли различия в использовании одинарных кавычек VS. используя двойные кавычки вокруг всего SQL-запроса?

Что лучше:

Этот подход (с одинарными кавычками):

$username = mysql_real_escape_string($username); $password = mysql_real_escape_string($password); $sql = 'SELECT * FROM users WHERE username = "' . $username . '" AND password = "' . $password . '" LIMIT 1'; 

?

Или этот подход (с использованием двойных кавычек):

  $username = mysql_real_escape_string($username); $password = mysql_real_escape_string($password); $sql = "SELECT * FROM users WHERE username = '{$username}' AND password = '{$password}' LIMIT 1"; 

Есть ли лучший способ сделать это?

Для меня мне нравится первый подход, поскольку я всегда предпочитаю одиночные кавычки в PHP. Поэтому я хочу убедиться, что использование одиночных кавычек вокруг всего SQL-запроса в порядке и использование двойных кавычек вокруг переменных или данных в порядке и является кросс-платформенным и может использоваться с базами данных, отличными от MySQL!

Используйте PDO вместо любого из этих подходов. Это позволит вам использовать параметры вместо строк.

 $sth = $dbh->prepare('SELECT * FROM users WHERE username = :username AND password = :password LIMIT 1'); $sth->bindParam(':username', $username, PDO::PARAM_STR); $sth->bindParam(':password', $password, PDO::PARAM_STR); $sth->execute(); 

Кстати, убедитесь, что вы не используете пароли в текстовом формате одновременно.

Они оба одинаково ужасны. 🙂 Забудьте, что вы когда-либо слышали о mysql_real_escape_string и использовали PDO как упомянутый acrosman. В частности, посмотрите заявление о подготовке: http://www.php.net/manual/en/pdo.prepare.php . Это особенно важно, поскольку вы даже говорите: «является кросс-платформенным и может использоваться с базами данных, отличными от MySQL!» Не пытаться оторваться как придурок, но подсказка: код, который вызывает методы, которые начинаются с mysql_, не probabl не кросс-платформенный;). Однако использование PDO позволит вам использовать базы данных, отличные от Mysql. Конечно, очевидное предостережение здесь от разных вкусов sql, но по крайней мере у вас нет разных вариантов того, какие строки нужно избегать, если вы используете параметризованные запросы.