Используйте переменную в heredoc в PHP (практика SQL)

Я новичок в 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());
    }
?>

person Mathieu    schedule 30.06.2012    source источник
comment
вы используете NOWDOC, а не HEREDOC   -  person Gordon    schedule 30.06.2012
comment
может быть, действительно глупый вопрос, но нужно ли EX выравнивать по левому краю?   -  person edwardsmarkf    schedule 01.01.2021


Ответы (1)


Ваш 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.
  • #P2# <блочная цитата> #P3# #P4#
  • Сложные типы данных в строках должны быть окружены {}, чтобы их можно было анализировать как переменные. Например, $data['game_name'] должно быть {$data['game_name']}.

Вы путаете heredoc и nowdoc здесь. Вы хотите использовать heredoc, а не Nowdoc, потому что в вашей строке есть переменные. Heredocs являются «расширенными» строками в двойных кавычках, тогда как nowdocs больше похожи на строку в одинарных кавычках, поскольку переменные не анализируются в строках nowdoc, а находятся в heredoc.

  • Подробнее об этом документе здесь.
  • Подробнее о Nowdoc здесь.

Пожалуйста, внимательно прочитайте документацию по ним.

person Bojangles    schedule 30.06.2012