2011-05-15 270 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;