我正在努力将插件集成到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查询中。是这样的吗?
答案 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 parsing的manual page about strings部分对此进行了解释。它有助于阅读整个页面以及用户评论。
基本思想是,对于用引号("
)和heredoc块括起来的字符串,PHP在需要使用它时在字符串中搜索变量,并用它们的值替换它们。执行的时刻。这意味着相同的字符串可以在脚本执行的不同时刻呈现不同的值。
这只是语法糖,它不会改变代码的行为方式,任何包含变量的字符串都可以使用字符串连接运算符(.
)重写。通常这种语法会产生更短的源代码。有时代码更容易以这种方式阅读,有时候更难,因为复杂的表达式(数组访问,fe)需要用字符串内的大括号({
和}
)括起来。 / p>
答案 3 :(得分:1)
您提到的代码将在PHP中运行,没有任何问题。有关详细信息,请参阅PHP Manual。
您可能需要关注的其他问题是函数mysql_query是折旧的。请参考here。这让我觉得你要使用的插件使用不正确。还有一个问题是,将SQL变量中的变量直接传递给可能的security问题
是不错的做法