PDO语句为日期WHERE子句返回零行

时间:2013-09-29 20:22:49

标签: php mysql pdo

我有两个文件,一个是显示我网站最新添加的页面,另一个是指向第一页的链接。

问题:如果我在like中包含=关键字而不是sql,则查询有效。但是,当我使用=(这就是我想要的)时,它会返回零行。

代码段:

前page.php文件

echo "On " . max($last_date) . ", we had <a href='/latest-txt.php?date=$md'>" . count($last_posts) . "</a> text posts!"

最新-text.php

$query = $_GET[$md];

$stmt = $db->prepare("SELECT * FROM $db_tb_name WHERE $db_tb_atr_name5 = ? ORDER BY RAND () LIMIT 0, 15");

if($stmt->execute(array("%$query%"))){

echo "Search Results<ol>";

while($data_fetch = $stmt->fetch(PDO::FETCH_ASSOC)){
        echo "<li>";

echo "<div class='tagtext'>AUTHOR: ";    
echo substr($data_fetch[$db_tb_atr_name2], 0,160)," "," ";
echo "TAG: ";
echo substr($data_fetch[$db_tb_atr_name3], 0,160)," ";
//echo substr($data_fetch[$db_tb_atr_name4], 0,160)," ";

echo "</div>";
echo "<div class='tagtext'>MESSAGE: ";
echo substr($data_fetch[$db_tb_atr_name], 0,160);
echo "</div>";

//echo substr($data_fetch[$db_tb_atr_name], 0,160);

echo "</li><hr/>";

    }

}    

echo "</ol>";

任何人都可以帮忙吗?感谢。

3 个答案:

答案 0 :(得分:0)

因为您尝试在不使用%的搜索条件中使用LIKE作为wilcard,这意味着将%字符连接到$query值。

您正在查询

SELECT * FROM $db_tb_name WHERE $db_tb_atr_name5 = '%2013-09-30%' ORDER BY RAND () LIMIT 0, 15

因为表中没有值为'%2013-09-30%'的行,所以查询返回零行。

在删除$stmt->execute(array("%$query%"))之前,您应该将$stmt->execute(array($query))更改为like

我建议你改变你的方式绑定参数。

$stmt->bindValue(1, $query, PDO::PARAM_STR);

在执行和执行之前

if($stmt->execute())
{
  ...
}

除此之外,我们必须知道$query$md的价值。

请尝试使用$_GET['date']

另一种方法是了解错误: 1.如果您获得0行没有错误消息,您的查询工作正常。 2.如果你在不知道有异常的情况下得到0行,那就让我们对你的代码进行一些修改:

try
{

    $query = $_GET[$md];

    $stmt = $db->prepare("SELECT * FROM $db_tb_name WHERE $db_tb_atr_name5 = ? ORDER BY RAND () LIMIT 0, 15");
    $stmt->bindValue(1, $query, PDO::PARAM_STR);

    $stmt->execute();
    {
        echo "Search Results<ol>";

        while($data_fetch = $stmt->fetch(PDO::FETCH_ASSOC))
        {
            echo "<li>";
            echo "<div class='tagtext'>AUTHOR: ";    
            echo substr($data_fetch[$db_tb_atr_name2], 0,160)," "," ";
            echo "TAG: ";
            echo substr($data_fetch[$db_tb_atr_name3], 0,160)," ";
            echo "</div>";
            echo "<div class='tagtext'>MESSAGE: ";
            echo substr($data_fetch[$db_tb_atr_name], 0,160);
            echo "</div>";
            echo "</li><hr/>";
        }  
    }    

    echo "</ol>";

} 
catch (PDOException $pdoe) 
{
    throw $pdoe;
}

答案 1 :(得分:0)

  1. $query=$_GET[$md]替换为$query=$_GET['date']

  2. "%$query%"替换为$query

  3. (两者都有人建议:))

答案 2 :(得分:-1)

由于执行数组中的%通配符,Equal Operator =是一个比较运算符,并将%作为文字字符。

LIKE是可以使用通配符的模式匹配。 MySQL 5.7: String Comparison Functions

%   Matches any number of characters, even zero characters
_   Matches exactly one character