{}如何在PHP中影响MySQL查询?

{}如何在PHP中影响MySQL查询?

问题描述:

以下2个查询有什么区别?{}如何在PHP中影响MySQL查询?

mysql_query("UPDATE table SET name = '$name'"); 

mysql_query("UPDATE table SET name = '{$name}'"); 
+1

我还没有遇到使用大括号的SQL语法。 – 2011-03-20 18:19:48

+4

示例代码可能容易受到[SQL注入](http://unixwiz.net/techtips/sql-injection.html),这是一个非常严重的[安全风险](http://bobby-tables.com/ )。为了解决这个问题,从过时的mysql驱动程序切换到[PDO](http://php.net/PDO)并使用[prepared statements](http://www.php.net/PDO.prepared-statements)。如果您需要PDO教程,请尝试[“用PHP和PDO编写MySQL脚本”](http://www.kitebird.com/articles/php-pdo.html)。您保存的网站可能只是您自己的网站。 – outis 2011-03-20 18:23:02

+0

大括号是一个PHP的东西,而不是MySQL的东西,FYI – 2011-03-20 18:26:36

在SQL方面,绝对没有区别:两个查询完全一样。
(您可以检查通过回声-ING它们)

{$variable}$variable更完整的语法,即允许使用:

  • "this is some {$variable}s"
  • "{$object->data}"
  • "{$array['data']}"
  • "{$array['data']->obj->plop['test']}"


欲了解更多信息,请阅读说明书Variable parsing/Complex (curly) syntax部分(引用了几位)

这不叫复杂,因为 语法复杂,而是因为它 允许使用复杂的 表达式。

任何标量变量,数组元素或 带有字符串的对象属性 表示可以通过 包含此语法。
只需将 表达式与 出现在字符串外部的方式相同,然后 将其包装在{}中。

+0

不错的完整答案! – Treffynnon 2011-03-20 18:24:36

大括号“转义”PHP变量并且不传递给MySQL。用一个简单的变量如$name它并没有什么区别,但是它有一些像$user['name']这样的东西。所以你在问题中发布的两个查询之间没有什么不同。

该查询可以,如果你想通过单一的变量被使用:

mysql_query("UPDATE table SET name = '$name'"); 

这可以如果从数组的特定索引传递的值来使用。

mysql_query("UPDATE table SET name = '{$1}'",$name); 

顺便说一句,你的两个查询也都是正确的。

+0

请注意,您可以[将行格式化为代码](http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks)缩进四个空格。编辑器工具栏中的“{}”按钮可以为您做到这一点。编辑你的答案并尝试一下。单击编辑器工具栏中的橙色问号以获取更多信息和格式化提示。 – outis 2011-03-20 18:47:21