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.
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;
'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.
{}
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.
Veuillez lire la documentation plus attentivement à ce sujet.