没有“点”运算符的PHP字符串concat

时间:2015-01-14 09:58:05

标签: php

我正在努力将插件集成到PHP Web应用程序中,一行代码让我感到困惑:

$sql = "update inventory set qtyleft='$qtyleft',price='$price',sales=sales+'$sales',qtysold=qtysold+'$qtysold' where id='$id'";
mysql_query($sql);

其中$ qtyleft,$ price,$ sales,$ qtysold和$ id都是变量。

我对PHP不太熟悉,但我一直认为PHP中的字符串连接是通过使用。运算符,在我看来,上面的代码只是一个长字符串而没有实际将这些变量放到SQL查询中。是这样的吗?

4 个答案:

答案 0 :(得分:8)

在PHP中,双引号(")分隔的字符串将evaluate variables in them

$foo = 42;
echo "The answer for everything is $foo"; // The answer for everything is 42

这个具体示例非常糟糕,因为您不应该直接在SQL查询中包含变量,也不应该在新代码中使用mysql_query

查看更多:

答案 1 :(得分:1)

请参阅the Strings manual page的变量解析部分。

  

当用双引号或heredoc指定字符串时,会在其中解析变量。

如果对字符串使用单引号,则变量将不是interpolated。如果你使用双引号,它们将是。

答案 2 :(得分:1)

有人称之为"变量插值"。 Variable parsingmanual page about strings部分对此进行了解释。它有助于阅读整个页面以及用户评论。

基本思想是,对于用引号(")和heredoc块括起来的字符串,PHP在需要使用它时在字符串中搜索变量,并用它们的值替换它们。执行的时刻。这意味着相同的字符串可以在脚本执行的不同时刻呈现不同的值。

这只是语法糖,它不会改变代码的行为方式,任何包含变量的字符串都可以使用字符串连接运算符(.)重写。通常这种语法会产生更短的源代码。有时代码更容易以这种方式阅读,有时候更难,因为复杂的表达式(数组访问,fe)需要用字符串内的大括号({})括起来。 / p>

答案 3 :(得分:1)

您提到的代码将在PHP中运行,没有任何问题。有关详细信息,请参阅PHP Manual

您可能需要关注的其他问题是函数mysql_query是折旧的。请参考here。这让我觉得你要使用的插件使用不正确。还有一个问题是,将SQL变量中的变量直接传递给可能的security问题

是不错的做法