Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
218 views
in Technique[技术] by (71.8m points)

Use a variable within heredoc in PHP (SQL practice)

I'm a newbie to PHP/SQL and I am trying to use a variable within a heredoc as I need to output a lot of text. I've only included the first sentence as it is enough to show the problem).

My problem is that within the heredoc, the variables (see below: $data['game_name] and $data['game_owner']) are not recognized as variables, but as plain text. How can I solve this?

<?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());
    }
?>
question from:https://stackoverflow.com/questions/11274354/use-a-variable-within-heredoc-in-php-sql-practice

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Your heredoc needs a little modification (because it's actually Nowdoc!):

    echo <<<EX
    <p>Game: {$data['game_name']}<br/>
    the owner of the game is {$data['game_owner']}
    </p>
EX;
  • Heredoc identifiers (unlike nowdoc ones) cannot be quoted. 'EX' needs to become EX.
  • The heredoc terminator must not have any preceding whitespace. From the documentation:

    It is very important to note that the line with the closing identifier must contain no other characters, except possibly a semicolon (;).

    You're confusing Nowdoc with heredoc.

  • Complex data types in strings must be surrounded by {} for them to be parsed as variables. For example, $data['game_name'] should be {$data['game_name']}.

You're mixing up heredoc and nowdoc here. You want to use heredoc and not Nowdoc because you've got variables inside your string. Heredocs are "extended" double quoted strings, whereas nowdocs are more akin to a single quoted string, in that variables are not parsed in nowdoc strings, but are in heredoc.

  • More on heredoc here.
  • More on Nowdoc here.

Please read the documentation more carefully on these.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...