Используйте переменную в 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);
    //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());
}
?>

Любая помощь была бы очень признательна.

Author: Ben, 2012-06-30

1 answers

Ваш Heredoc нуждается в небольшой модификации (потому что на самом деле это теперь Doc!):

    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, потому что у вас есть переменные внутри строки. Heredoc - это "расширенные" строки в двойных кавычках, тогда как nowdoc больше похожи на строку в одинарных кавычках, поскольку переменные не анализируются в nowdoc строки, но находятся в heredoc.

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

 67
Author: Bojangles, 2018-08-20 21:08:26