大括号{}在SQL查询中做了什么?

时间:2012-02-01 23:00:52

标签: php mysql

例如,检查以下查询;

$query = "SELECT * FROM users WHERE user='{$_POST['username']}';  

有什么用?

在字符串上下文中,我确实理解它解决的问题 我可以做类似的事情 $ animal =“cat” echo“{$ animal} s。” //输出猫

但是在我上面发布的SQL中,我只是不明白。 以下不一样好吗?

$query = "SELECT * FROM users WHERE user='$_POST['username']' AND password='$_POST['password']'";  

那么,使用{和}的地方方便吗?欣赏SQL上下文中的任何示例?

2 个答案:

答案 0 :(得分:8)

有关双引号字符串语法,请参阅http://www.php.net/manual/de/language.types.string.php#language.types.string.parsing

花括号用于复杂的变量表达式。它们由PHP解释,而不是由SQL接口解释。

$query = "SELECT * FROM users WHERE user='$_POST['username']' AND password='$_POST['password']'";  

以上将导致解析错误。没有花括号,你必须写:

$query = "SELECT * FROM users WHERE user='$_POST[username]' AND password='$_POST[password]'";  

请注意缺少关键引号。这仅适用于简单的数组访问,以及简单的对象属性表达式。对于任何更复杂的东西,请使用花括号。


现在你知道了,做一个你不会这样做的小发誓。因为直接插入用户输入并不是一个好主意。 http://bobby-tables.com/

帮自己一个忙,并使用PDO with prepared statements所以更容易。


但是为了给一个更复杂的卷曲字符串语法提供一个例子,这就是我要做的:

$query = "SELECT * FROM users WHERE user={$_POST->id->sql['username']}";

(有些内联过滤和引用。就像示例一样,不适用于默认的PHP设置。)

答案 1 :(得分:1)

PHP无法直接在字符串中转换字典项。你必须这样做:

query = "SELECT * FROM users WHERE user='" . $_POST['username'] . "' AND password='" . $_POST['password'] . "'";

curlybrackets是另一种编写方式而不会像我的例子那样连接字符串