【发布时间】:2011-08-29 00:49:46
【问题描述】:
在整个 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 以外的数据库一起使用!
【问题讨论】:
-
我可能弄错了,但我记得插值(您的第二种方法)比串联(您的第一种方法)更快
-
由于对SQL Injection attacks 的敏感性,两者都不是推荐的做法。强烈建议使用 PDO 或准备好的语句。
-
@OMG Ponies:即使他们使用的是
mysql_real_escape_string? -
唯一的区别是其中一件事比另一件事花费更少的精力。虽然 MySQL 是宽容的(取决于配置!),但只有单引号可用于在 SQL 中包含字符串。