【问题标题】:pdo select statement returning no rowspdo select 语句不返回任何行
【发布时间】:2011-04-20 01:30:35
【问题描述】:

我正在使用 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 ,我会得到正确的结果。我已经逐步查看了变量,它们看起来是正确的......我已经浪费了很多时间来寻找,但我缺乏专业知识来找出我做错了什么。

【问题讨论】:

    标签: php mysql select pdo


    【解决方案1】:

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

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

    $_GET 参数自动进行 url 解码。

    【讨论】:

    • 引导我找到解决方案,即使是偶然的。我的变量从代码的前面部分获取了额外的引用。 var_dump...下次我会记住的。 :)
    【解决方案2】:

    你必须要求 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();
    }
    

    【讨论】:

    • 虽然这是个好建议,但他的查询不太可能抛出异常,因为它的格式很好。如果有的话,对DATE() 的调用将返回NULL(输入错误)并且不会返回任何记录。
    猜你喜欢
    • 2011-05-15
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2020-11-03
    相关资源
    最近更新 更多