花括号 在 SQL 查询中的作用是啥? [复制]

Posted

技术标签:

【中文标题】花括号 在 SQL 查询中的作用是啥? [复制]【英文标题】:what does curly brackets do in a SQL query? [duplicate]花括号 在 SQL 查询中的作用是什么? [复制] 【发布时间】:2012-02-24 15:44:56 【问题描述】:

例如,检查以下查询;

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

有什么用?

在字符串上下文中,我确实理解它解决的问题。 我可以做类似的事情 $动物=“猫” 回声“$animals。” // 输出猫

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

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

那么,使用 和 有什么用?欣赏 SQL 上下文中的任何示例?

【问题讨论】:

你也应该用另一种编程语言标记它 - php 您的查询和其他查询一样是一个字符串。唯一的区别是你的数据库引擎可以用它做一些有用的事情。 @blorgbeard,你是对的,我应该标记为 PHP。另一方面..当您编写这样的 cmets 时如何创建换行符...当您按下回车键时,它会启动 Add Comment 按钮。 【参考方案1】:

请参阅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 设置。)

【讨论】:

另外,花括号还可以防止 PHP 将过多的字符解释为变量名。例如,如果您有 $var$var2print "$var_and_var2" will not work, you'll need to use print "$var_and_$var2"` (...或使用 printf() 或字符串连接...) @mario, "花括号用于复杂的变量表达式。它们由 PHP 解释,而不是由 SQL 接口"。这就是马里奥。另外,是的,我对忽略'$_POST['username']' 部分的示例并不小心。当然, ` 会让我失望。此外,您关于不在 SQL 中插入输入的观点,非常好……这只是一个引起人们注意 东西的例子。但是,是的……你是对的!【参考方案2】:

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

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

花括号是另一种编写方式,无需像我的示例那样连接字符串

【讨论】:

以上是关于花括号 在 SQL 查询中的作用是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

.net 中的 [] 括号是啥? [复制]

JSP中的美元花括号$是啥意思?

Python0:4是啥意思?

Java中的花括号本身是啥意思?

XAML 中的花括号实际上是啥意思?

python 一条语句后加个中括号是啥意思a=b[b==0]?