2012-06-30 16 views
20

Sono un novizio di PHP/SQL e sto cercando di utilizzare una variabile all'interno di un heredoc in quanto ho bisogno di un sacco di testo. Ho incluso solo la prima frase in quanto è sufficiente per mostrare il problema).Utilizzare la variabile all'interno di heredoc in PHP (pratica SQL)

Il mio problema è che all'interno di heredoc, le variabili (vedi sotto: $data['game_name] e $data['game_owner']) non sono riconosciute come variabili ma come testo normale. Come posso risolvere questo?

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

Qualsiasi aiuto sarebbe molto apprezzato.

+0

si sta utilizzando [NOWDOC] (http://php.net/nowdoc) non HEREDOC – Gordon

risposta

61

tuo heredoc ha bisogno di una piccola modifica (perché in realtà è Nowdoc!):

echo <<<EX 
    <p>Game: {$data['game_name']}<br/> 
    the owner of the game is {$data['game_owner']} 
    </p> 
EX; 
  • identificatori heredoc (a differenza di quelli nowdoc) non può essere citato. 'EX' deve diventare EX.
  • Il terminatore Heredoc non deve avere spazi precedenti. Dai documenti:

    È molto importante notare che la riga con l'identificatore di chiusura non deve contenere altri caratteri, tranne forse un punto e virgola (;).

    Stai confondendo Nowdoc con Heredoc.

  • I tipi di dati complessi nelle stringhe devono essere circondati da {} affinché possano essere analizzati come variabili. Ad esempio, $data['game_name] dovrebbe essere {$data['game_name]}.

Stai mescolando heredoc e nowdoc qui. Si desidera utilizzare Heredoc e non Nowdoc perché ci sono variabili all'interno della stringa. Heredocs sono stringhe "estese" con doppia quotatura, mentre nowdocs sono più simili a una singola stringa quotata, in quanto le variabili non vengono analizzate nelle stringhe nowdoc, ma sono in heredoc.

  • Ulteriori informazioni su Heredoc here.
  • Ulteriori informazioni su Nowdoc here.

Si prega di leggere la documentazione più attentamente su questi.

+0

grande, grazie ha funzionato! – Mathieu

+0

sì ho rimosso le parentesi su 'EX' per renderlo heredoc – Mathieu

+0

ho schierato e ha funzionato! – Mathieu