43

我是 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);

        // Then I read the data in the database '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());
    }
?>
4

1 回答 1

108

您的 heredoc 需要稍作修改(因为它实际上是 Nowdoc!):

    echo <<<EX
    <p>Game: {$data['game_name']}<br/>
    the owner of the game is {$data['game_owner']}
    </p>
EX;
  • Heredoc 标识符(与 nowdoc 不同)不能被引用。'EX'需要成为EX
  • heredoc 终止符不能有任何前面的空格。从文档中:

    需要注意的是,带有结束标识符的行不能包含其他字符,可能除了分号 (;)。

    您将Nowdoc 与heredoc 混淆了。

  • 字符串中的复杂数据类型必须被包围,{}才能将它们解析为变量。例如,$data['game_name']应该是{$data['game_name']}

你在这里混淆了heredoc和nowdoc。您想使用heredoc不是Nowdoc,因为您的字符串中有变量。Heredocs 是“扩展的”双引号字符串,而 nowdocs 更类似于单引号字符串,因为变量不在 nowdoc 字符串中解析,而是在 heredoc 中。

请更仔细地阅读这些文档。

于 2012-06-30T13:21:25.947 回答