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



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

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

代码片段:

头版.php

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

最新文本.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>";

有人可以帮忙吗?谢谢。

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

您正在查询

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

由于表中没有具有值'%2013-09-30%'的行,因此查询返回零行。

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

我建议您更改方式绑定参数。

$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. $query=$_GET[$md]替换为$query=$_GET['date']

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

(两者都是你们中的一些人所建议的:))

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

LIKE是可以使用通配符的模式匹配。MySQL 5.7:字符串比较函数

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

相关内容

  • 没有找到相关文章