web-dev-qa-db-fra.com

Utiliser une variable dans heredoc dans PHP (pratique SQL)

Je suis novice en PHP/SQL et j'essaie d'utiliser une variable dans un hérédoc car j'ai besoin de mettre beaucoup de texte. Je n'ai inclus que la première phrase car il suffit de montrer le problème).

Mon problème est que dans l'hérédoc, les variables (voir ci-dessous: $data['game_name] et $data['game_owner']) ne sont pas reconnus comme une variable mais comme du texte brut. Comment puis-je résoudre ça?

<?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());
}
?>

Toute aide serait très appréciée.

33
Mathieu

Votre Heredoc a besoin d'une petite modification (car c'est en fait Nowdoc!):

    echo <<<EX
    <p>Game: {$data['game_name']}<br/>
    the owner of the game is {$data['game_owner']}
    </p>
EX;
  • Les identifiants Heredoc (contrairement à ceux de nowdoc) ne peuvent pas être cités. 'EX' doit devenir EX.
  • Le terminateur Heredoc ne doit pas avoir un espace précédent. De la documentation:

    Il est très important de noter que la ligne avec l'identifiant de fermeture ne doit contenir aucun autre caractère, sauf éventuellement un point-virgule (;).

    Vous confondez Nowdoc avec Heredoc.

  • Les types de données complexes dans les chaînes doivent être entourés de {} pour qu'ils soient analysés en tant que variables. Par exemple, $data['game_name'] devrait être {$data['game_name']}.

Vous mélangez heredoc et nowdoc ici. Vous voulez utiliser Heredoc et pas Nowdoc parce que vous avez des variables dans votre chaîne. Les Heredocs sont des chaînes entre guillemets "étendues", alors que les nowdocs s'apparentent plus à une seule chaîne entre guillemets, en ce sens que les variables ne sont pas analysées dans les chaînes nowdoc, mais dans heredoc.

  • Plus sur Heredoc ici .
  • Plus sur Nowdoc ici .

Veuillez lire la documentation plus attentivement à ce sujet.

81
Bojangles