web-dev-qa-db-ja.com

PHP(SQLプラクティス)でheredoc内の変数を使用する

私はPHP/SQLの初心者であり、多くのテキストを必要とするため、ヒアドキュメント内で変数を使用しようとしています。問題を示すのに十分なので、最初の文のみを含めました)。

私の問題は、ヒアドキュメント内の変数(以下を参照:$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());
}
?>

どんな助けでも大歓迎です。

33
Mathieu

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ターミネータmust notの前には空白があります。ドキュメントから:

    終了識別子を持つ行には、セミコロン(;)を除き、他の文字を含めることはできないことに注意することが非常に重要です。

    NowdocとHeredocを混同しています。

  • 文字列内の複雑なデータ型は、変数として解析されるために{}で囲まれている必要があります。たとえば、$data['game_name']{$data['game_name']}である必要があります。

Heredocとnowdocをここで混同しています。 Heredocおよびnot Nowdocを使用したいのは、文字列内に変数があるためです。ヒアドキュメントは「拡張された」二重引用符で囲まれた文字列ですが、nowdocは単一引用符で囲まれた文字列に似ています。変数はnowdoc文字列では解析されず、heredocにあります。

これらのドキュメントをより注意深く読んでください。

81
Bojangles