【问题标题】:Echo a string with variable inside, getted from DB回显一个带有变量的字符串,从 DB 获取
【发布时间】:2014-12-16 23:17:15
【问题描述】:

我从 MySQL 查询中得到一个字符串,我必须将它打印到屏幕上。在这个字符串中,我也需要打印一些变量。来自 DB 的字符串可能是:

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

$matchData['team_name']是计算比赛时使用的数组,如果我做一个简单的

echo $matchData['team_name'];

将打印球队的正确名称(本例中为波士顿)。但是为什么如果我回显从 DB 获得的字符串,echo print:

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

而不是

Finally, the team BOSTON have scored a point!

我哪里失败了?

【问题讨论】:

  • 你能告诉我们你是如何回显字符串的吗?变量如何传递等。
  • 我从数据库中获取字符串并将其放入变量 $textToPrint。在我做 echo $testToPrint;
  • 字符串中的 {$var} 不会被解释为变量,除非它在 ​​PHP 代码中用双引号括起来进行硬编码。如果它来自数据库或文件等,则不会那样工作。
  • 感谢您的回复...您有什么建议?

标签: php mysql arrays variables echo


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    字符串中的变量替换仅在一种情况下有效:在源代码中的字符串文字中:

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

    适用于您从其他任何地方获得的任何随机输入。想象一下,如果用户在您的网页中输入以下内容会发生什么:

    嗨,这是我的 $password。

    如果 PHP 只是简单地将 $password 替换为同名变量,那么窥探程序的内部结构将是微不足道的。这不是它的工作方式。

    最好的办法是在数据库数据中显式保留占位符,并用显式定义的数据显式替换它们。例如:

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

    http://php.net/sprintf

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-17
      • 2011-12-05
      • 2011-09-25
      • 2020-04-28
      • 1970-01-01
      • 2021-04-08
      • 2012-06-10
      • 1970-01-01
      相关资源
      最近更新 更多