pdo select语句不返回任何行

时间:2010-10-01 20:34:12

标签: php mysql select pdo

我正在使用PHP从mySQL中进行简单的选择。我做错了,我似乎无法追查。

这是我的陈述:

$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,我会得到正确的结果。我已经介入并查看了变量,它们似乎是正确的......我已经浪费了很多时间去寻找,但我缺乏专业知识来挑选出我做错的事情。

2 个答案:

答案 0 :(得分:3)

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

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

$_GET个参数会自动进行网址解码。

答案 1 :(得分: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();
}