2010-10-01 104 views
4

我正在使用PHP从mySQL中进行简单的选择。我做错了事情,我似乎无法追查。pdo select语句不返回行

这里是我的发言:

$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; 
      }; 

这不引发错误,并没有给出行。

如果我用硬编码SQL语句替换标识符:storyTitle和:storyDate,我会得到正确的结果。我已经开始了解变量,他们看起来是正确的......我已经浪费了很多时间,但我缺乏专业知识来挑选我做错了什么。

回答

3

转储变量的内容。我很怀疑:

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

$_GET参数自动被url解码。

+0

导致我的解决方案,即使偶然。我的变量正在从代码中的较早版本中获取额外的引用。 var_dump ...我会记住下次。 :) – 2010-10-01 20:44:56

0

你要问PDO抛出异常明确

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

虽然这是一个很好的建议,但他的查询不可能抛出异常,因为它的格式良好。如果有的话,对'DATE()'的调用将返回NULL(给定错误输入)并且不会返回任何记录。 – Matthew 2010-10-01 20:46:25