PHP和mySQL单引号还是双引号?

Fra*_*sco 2 php mysql sql

我没有看到使用单引号或双引号有任何区别.什么时候或为什么我应该使用第一个而不是后者?

我已经阅读了一些针对SQL的地方我应该使用单打 - 为什么?

Pri*_*rix 6

您应该使用单引号和mysql_real_escape_string的组合或移入PDO.

mysql_real_escape_string将负责清理要存储在数据库中的任何不干净的变量,单引号将阻止其中的任何执行.

这是一个例子:

$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
            mysql_real_escape_string($user),
            mysql_real_escape_string($password));
Run Code Online (Sandbox Code Playgroud)

PDO的例子:

$dbh = new PDO('mysql:dbname=your_database;host=your_host', $user, $password);
$stmt = $dbh->prepare('SELECT * FROM users WHERE user = :username AND password = :password');
$stmt->execute(array('username' => $user, 'password' => $password)); 
Run Code Online (Sandbox Code Playgroud)

如果您没有正确清理要存储的数据,则可能会遭受SQL注入.

例如,普通查询

SELECT * FROM users WHERE user = 'test'
Run Code Online (Sandbox Code Playgroud)

注入查询:

SELECT * FROM users WHERE user = 'anything' OR 'x'='x'
Run Code Online (Sandbox Code Playgroud)

另一个例子:

SELECT * FROM users WHERE user = ' '; DROP TABLE users
Run Code Online (Sandbox Code Playgroud)

有关SQL注入攻击的更多信息:SQL注入预防,MySQL注入

为什么你应该使用php的PDO进行数据库访问