2011-05-15 281 views
2

What's之間的差時(使用{}花括號)和級聯(或點):差分構造SQL語句

$sql = "select * from {$table}"; 

和此:

$sql = "select * from ".$table; 

有什麼區別嗎?

+0

http://php.net/manual/en/language.types.string。 php – Gazler 2011-05-15 11:14:56

+1

區別在於你不能使用前者。 – NikiC 2011-05-15 11:20:35

+2

一方面請注意:如果'$ table'包含用戶輸入,請不要忘記使用正確的轉義函數,並在變量周圍放置單引號以防止SQL注入。 – 2011-05-15 11:33:39

回答

4

沒有多少比一個其他的不同的使用級聯和一個沒有。

你也可以寫爲

$sql = "select * from $table"; 

您可以使用{}字符串中的引用對象爲好。

如果表是一個名稱或數組

$sql = "select * from {$table->name}"; //works 
$sql = "select * from $table->name"; //works too 
$sql = "select * from $table->innerTable->table"; //doesn't work 

$sql = "select * from {$table['name']}"; //works 
$sql = "select * from $table['name']"; //breaks 

我個人用它來增加可讀性,因爲我總是知道我指的是一個變量。

+3

-1示例2有效,示例4在您刪除引號時有效。 – NikiC 2011-05-15 11:19:16

+0

$ table-> data-> name會中斷,但是$ table-> name會起作用。並在技術上@nikic,example4是正確的,壽,不知道你是否放棄了它的工作報價,所以+1你的 – Ascherer 2011-05-15 11:20:59

+0

@nikic我知道這個例子工程,如果你刪除報價。這就是爲什麼他們包括在內。這不是一個錯字。字符串中的引號和非引號索引是不同的。你對示例2是正確的。現在修復它,謝謝 – JohnP 2011-05-15 11:21:41

1

你甚至可以在php中做到這一點:$sql = "SELECT * FROM $table ";它只是一個別名。

+3

別名是否正確?大聲笑 – Ascherer 2011-05-15 11:15:20

+0

種:-) ...我不是母語;-) – helle 2011-05-15 11:17:37

4

否 - 兩者都將在PHP中評估爲相同的字符串。

所以會

$sql = "select * from $table"; 
+0

好的,謝謝你的評論! – alxsimo 2011-05-15 11:18:38

+2

在這種情況下,兩者都是等價的,但通常它們不是。 – Gumbo 2011-05-15 11:19:10

0

正如前面提到的那樣,這兩個語句導致相同的字符串被分配給$ sql。不過,請注意使用單引號和串聯會更有效,因爲字符串並不需要通過PHP解析器解析:

$sql = 'select * from ' . $table;