2010-10-01 6 views
4

Je fais une sélection simple à partir de MySQL en utilisant PHP. Je fais quelque chose de mal que je n'arrive pas à retrouver.pdo select instruction ne renvoyant aucune ligne

Voilà ma déclaration:

$storyTitle = $_GET['title']; 
$storyDate = urldecode($_GET['date']); 
$SQL = "SELECT 
     * 
    FROM 
     tblContent 
    WHERE 
     REPLACE(contentTitle,' ' , '-') = :storyTitle 
    AND 
     date(publishDate) = date(:storyDate)"; 
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass); 
$q = $conn->prepare($SQL); 
$q->execute(array(':storyTitle' => $storyTitle, ':storyDate' => $storyDate)); 
      while($r = $q->fetch()){ 
       echo $SQL; 
      }; 

Cela jette aucune erreur et donne aucune ligne.

Si je remplace les identifiants: storyTitle et: storyDate avec une instruction SQL codée en dur, j'obtiens les résultats corrects. Je suis passé par là et j'ai regardé les variables, et elles me paraissent exactes ... J'ai déjà perdu tellement de temps à chercher, mais je n'ai pas l'expertise pour déterminer ce que je fais de mal.

Répondre

3

Vider le contenu de vos variables. Je me méfie de:

$storyDate = urldecode($_GET['date']); 

$_GET paramètres sont automatiquement décodées URL.

+0

m'a conduit à la solution même si d'ailleurs. Mes variables récupéraient des citations supplémentaires plus tôt dans le code. var_dump ... Je m'en souviendrai pour la prochaine fois. :) –

0

vous devez demander PDO de jeter une erreur explicitement

try { 
    $conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    $q = $conn->prepare($SQL); 
    $q->execute(array(':storyTitle' => $storyTitle, ':storyDate' => $storyDate)); 
} catch (PDOException $e) { 
    echo $e->getMessage(); 
} 
+0

Bien que ce soit un bon conseil, il est peu probable que sa requête lance une exception car elle est bien formée. Si quelque chose, l'appel à 'DATE()' retournerait 'NULL' (donné une mauvaise entrée) et aucun enregistrement ne serait retourné. – Matthew