Php 构造SQL语句时插值(使用{}小括号)和连接(,,或点)之间的区别

Php 构造SQL语句时插值(使用{}小括号)和连接(,,或点)之间的区别,php,mysql,sql,Php,Mysql,Sql,以下两者之间的区别是什么: $sql = "select * from {$table}"; 这是: $sql = "select * from ".$table; 有什么不同吗?您甚至可以在php中执行此操作:$sql=“SELECT*FROM$table”它只是一个别名。否-两者在PHP中的计算结果将是相同的字符串 我也会 $sql = "select * from $table"; 除了使用连接和不使用连接之外,没有太大区别 你也可以把它写成 $sql = "select * fr

以下两者之间的区别是什么:

$sql = "select * from {$table}";
这是:

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

有什么不同吗?

您甚至可以在php中执行此操作:
$sql=“SELECT*FROM$table”它只是一个别名。

否-两者在PHP中的计算结果将是相同的字符串

我也会

$sql = "select * from $table";

除了使用连接和不使用连接之外,没有太大区别

你也可以把它写成

$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

我个人用它来增加可读性,因为我总是知道我指的是一个变量

结果是一样的,但当然你会做两件根本不同的事情:


第一个是(仅适用于双引号和herdoc字符串),第二个是。

如前所述,这两个语句都会将相同的字符串分配给$sql。请注意,使用单引号和串联稍微更有效,因为PHP解释器不需要解析字符串:

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

区别在于不应使用前者。一方面注意:如果
$table
包含用户输入,请不要忘记使用适当的转义函数,并在变量周围加单引号以防止SQL注入。种类:-。。。我不是以英语为母语的;-)在这种情况下,两者都是等价的,但一般来说它们不是。$table->data->name可能会中断,但$table->name起作用。从技术上讲@nikic,示例4是正确的,但是,不知道你是否放弃了它有效的报价,所以+1表示u@nikic我知道如果你不加引号,这个例子是有效的。这就是它们被包括在内的原因。这不是打字错误。字符串中带引号和不带引号的索引是不同的。关于例子2,你是对的。现在修好它,thanks@Ascherer是的,一个参考是可以的,不止一个,然后它就坏了。更新,谢谢