2011-03-20 25 views
12

以下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

回答

18

在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

7

大括號「轉義」PHP變量並且不傳遞給MySQL。用一個簡單的變量如$name它並沒有什麼區別,但是它有一些像$user['name']這樣的東西。所以你在問題中發佈的兩個查詢之間沒有什麼不同。

2

該查詢可以,如果你想通過單一的變量被使用:

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