0

'".$string."'以下两个查询的开启和之间有什么不同'$string'

SELECT * FROM users WHERE UserName='".$USERNAME."' AND Pass='".$PASS."'
/* AND */
SELECT * FROM users WHERE UserName='$USERNAME' AND Pass='$PASS'

如果不同,什么对安全性更好?字符串在输入时始终是安全的,但仅适用于上述不同

编辑: 我在 PHP JUST 上使用上述查询并需要它

4

2 回答 2

3

至少在 PHP 中,两者之间完全没有区别——它们做的事情完全相同。两者都同样容易受到 SQL 注入的影响。

于 2013-01-28T19:10:46.133 回答
2

在您的情况下,它们之间没有区别。

但是,如果您要连接的字符串不包含特殊字符(例如'),您会看到不同之处:

$b = 'b';
$string = "a" . $b . "c";

不等于:

$b = 'b';
$string = "a$bc";

因为 PHP 会寻找$bc变量。但这相当于:

$b = 'b';
$string = "a{$b}c";

以及您的示例等效于:

SELECT * FROM users WHERE UserName='{$USERNAME}' AND Pass='{$PASS}'

但请注意,单引号字符串:

$b = 'b';
$string = 'a{$b}c';

将被逐字阅读为a{$b}c.

最后,正如@duskwuff 警告的那样,您应该注意sql injections

于 2013-01-28T19:16:56.190 回答