Echo строка с переменной внутри, полученная из БД

Я получаю от MySQL запрос строку, и я должен ее распечатать на экране. В эту строку мне нужно также напечатать некоторую переменную. Строка из БД может быть:

Finally, the team {$matchData['team_name']} have scored a point! 

$matchData['team_name'] – это массив, используемый во время вычисления совпадения, и если я делаю простой

 echo $matchData['team_name']; 

напечатает правильное имя команды (BOSTON в этом случае). Но почему, если я повторяю строку, полученную из БД, echo print:

 Finally, the team {$matchData['team_name']} have scored a point! 

и не

 Finally, the team BOSTON have scored a point! 

Где я терпеть неудачу?

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!"; 

Подстановка переменных в строках работает только в одном случае: в строковых литералах в исходном коде:

 $foo = 'bar'; $baz = "This $foo works"; 

Он не работает ни на какой случайный вход, который вы получаете из другого места. Представьте, что произойдет, если пользователь напечатает это на вашей веб-странице:

Привет, это мой пароль.

Если PHP просто заменит $password на переменную с тем же именем, было бы тривиально отслеживать внутренние функции программы. Это не так, как работает.

Самое лучшее, что вам нужно сделать, это явно оставить заполнители в данных базы данных и явно заменить их явно определенными данными. Например:

 $string = 'Finally, the team %s have scored a point!'; $team = 'Foos'; printf($string, $team); 

http://php.net/sprintf