我从MySQL查询中得到一个字符串,我将其打印到屏幕上。进入这个字符串,我也需要打印一些变量。来自DB的字符串可以是:
Finally, the team {$matchData['team_name']} have scored a point!
$matchData['team_name']
是在计算匹配期间使用的数组,如果我做一个简单的
echo $matchData['team_name'];
将打印正确的团队名称(在本例中为BOSTON)。但是为什么如果我回应从DB echo print:
Finally, the team {$matchData['team_name']} have scored a point!
而不是
Finally, the team BOSTON have scored a point!
哪里失败?
答案 0 :(得分:0)
PHP似乎只在更简单的情况下处理字符串中的变量替换...确保它始终有效的简单方法是使用连接,如:
echo "Finally, the team ".$matchData['team_name']." have scored a point!";
PHP手册页确实提供了这个例子:
// You can also use arrays
$baz = array("value" => "foo");
echo "this is {$baz['value']} !"; // this is foo !
所以你可能也希望仔细检查你的语法。
最后,echo采用可变长度的参数列表,因此您也可以编写:
echo "Finally, the team ", $matchData['team_name'], " have scored a point!";
答案 1 :(得分:-1)
字符串中的变量替换仅适用于一种情况:源代码中的字符串文字:
$foo = 'bar';
$baz = "This $foo works";
不可以处理从其他地方获得的任何随机输入。想象一下,如果用户在您的网页中输入此内容会发生什么:
嗨,这是我的$密码。
如果PHP只是将$password
替换为同名变量,那么窥探一个程序的内部结构是微不足道的。这不是它的工作方式。
您要做的最好的事情是明确地将占位符留在数据库数据中,并使用明确定义的数据明确地替换它们。 E.g:
$string = 'Finally, the team %s have scored a point!';
$team = 'Foos';
printf($string, $team);