回显一个带有变量的字符串,从DB中获取

时间:2014-12-16 23:17:16

标签: php mysql arrays variables echo

我从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!

哪里失败?

2 个答案:

答案 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);

http://php.net/sprintf