2012-06-30 12 views
20

Soy un novato en PHP/SQL y estoy tratando de usar una variable dentro de un heredoc ya que necesito usar mucho texto. Solo he incluido la primera oración porque es suficiente para mostrar el problema).Usar la variable dentro de heredoc en PHP (práctica SQL)

Mi problema es que dentro del heredoc, las variables (ver a continuación: $data['game_name] y $data['game_owner']) no se reconocen como una variable sino como texto sin formato. ¿Como puedo resolver esto?

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

Cualquier ayuda sería muy apreciada.

+0

estás usando [NOWDOC] (http://php.net/nowdoc) no HEREDOC – Gordon

Respuesta

61

Su Heredoc necesita una pequeña modificación (porque en realidad nowdoc!):

echo <<<EX 
    <p>Game: {$data['game_name']}<br/> 
    the owner of the game is {$data['game_owner']} 
    </p> 
EX; 
  • identificadores heredoc (a diferencia de los nowdoc) no puede ser citado. 'EX' debe convertirse en EX.
  • El terminador Heredoc no debe tener ningún espacio en blanco anterior. De los documentos:

    Es muy importante tener en cuenta que la línea con el identificador de cierre no debe contener ningún otro carácter, excepto posiblemente un punto y coma (;).

    Estás confundiendo Nowdoc con Heredoc.

  • Los tipos de datos complejos en cadenas deben estar rodeados por {} para que se analicen como variables. Por ejemplo, $data['game_name] debe ser {$data['game_name]}.

Aquí está mezclando heredoc y nowdoc. Desea utilizar Heredoc y no Nowdoc porque tiene variables dentro de su cadena. Heredocs son cadenas dobles entrecomilladas "extendidas", mientras que nowdocs son más parecidas a una única cadena entrecomillada, en que las variables no se analizan en las cadenas de texto de nowdoc, sino que están en heredoc.

  • Más sobre Heredoc here.
  • Más sobre Nowdoc here.

Lea la documentación con más cuidado en estos.

+0

genial, ¡gracias funcionó! – Mathieu

+0

sí quité los corchetes en 'EX' para hacerlo heredoc – Mathieu

+0

¡Implementé y funcionó! – Mathieu

Cuestiones relacionadas