【问题标题】:How does {} affect a MySQL Query in PHP? [duplicate]{} 如何影响 PHP 中的 MySQL 查询? [复制]
【发布时间】:2011-07-19 05:33:00
【问题描述】:

以下2个查询有什么区别?

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

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

【问题讨论】:

  • 我还没有遇到使用大括号的 SQL 语法。
  • 示例代码可能容易受到SQL injection的攻击,这是一个非常严重的security risk。要修复这个漏洞,请从过时的 mysql 驱动程序切换到PDO 并使用prepared statements。如果您需要 PDO 教程,请尝试 "Writing MySQL Scripts with PHP and PDO"。您保存的网站可能只是您自己的。
  • 花括号是 PHP 的东西而不是 MySQL 的东西,仅供参考

标签: php mysql


【解决方案1】:

花括号“转义”PHP 变量并且不传递给 MySQL。使用像$name 这样的简单变量并没有什么不同,但使用像$user['name'] 这样的变量就可以了。因此,您在问题中发布的两个查询之间没有什么不同。

【讨论】:

    【解决方案2】:

    在 SQL 方面,绝对没有区别:两个查询完全相同。
    (您可以通过回显它们来检查)

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

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


    有关更多信息,您应该阅读手册的Variable parsing / Complex (curly) syntax 部分(引用一些内容)

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

    任何标量变量、数组元素或 带有字符串的对象属性 表示可以通过 这种语法。
    简单地写 表达方式和它一样 出现在字符串之外,然后 将其包装在 {} 中。

    【讨论】:

      【解决方案3】:

      如果您想传递单个变量,可以使用此查询:

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

      如果您从数组的特定索引传递值,则可以使用此方法。

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

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

      【讨论】:

      • 请注意,您可以 format lines as code 将它们缩进四个空格。编辑器工具栏中的“{}”按钮会为您执行此操作。编辑您的答案并尝试一下。单击编辑器工具栏中的橙色问号以获取有关格式设置的更多信息和提示。
      猜你喜欢
      • 2018-05-13
      • 2016-10-14
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多