我是PHP / SQL的新手,我正在尝试在heredoc中使用变量,因为我需要输入大量文本。我只包括了第一句,因为它足以显示问题。)
我的问题是在heredoc中,变量(见下文:$data['game_name]
和$data['game_owner']
)不会被识别为变量而是纯文本。我该如何解决这个问题?
<?php
try
{
//i am connecting the the database base mysql 'test'
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);
//the i read the data in the databse 'video_dame'
$response = $bdd->query('SELECT * FROM video_game');
//pour qu'elle soit visible à l'écran, on affiche chaque entrée une à une
while ($data= $response->fetch())
{
echo <<<'EX'
<p>Game: $data['game_name]<br/>
the owner of the game is $data['game_owner']
</p>
EX;
}
//i end the sql request
$response->closeCursor();
}
catch (Exception $e)
{
die('Error: '.$e->getMessage());
}
?>
非常感谢任何帮助。
答案 0 :(得分:75)
你的Heredoc需要一点修改(因为它实际上是Nowdoc!):
echo <<<EX
<p>Game: {$data['game_name']}<br/>
the owner of the game is {$data['game_owner']}
</p>
EX;
'EX'
需要成为EX
。Heredoc终结符不得具有任何前面的空格。来自文档:
非常重要的是要注意,带有结束标识符的行必须不包含其他字符,除了可能是分号(;)。
你对Nowdoc和Heredoc感到困惑。
{}
包围才能将其解析为变量。例如,$data['game_name']
应为{$data['game_name']}
。 你在这里混合了heredoc和nowdoc。你想使用 Heredoc 和而不是 Nowdoc,因为你的字符串里面有变量。 Heredocs是“扩展”双引号字符串,而nowdocs更类似于单引号字符串,因为变量不是在nowdoc字符串中解析,而是在heredoc中。
请仔细阅读文档。