0

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

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

代码片段:

头版.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>";

有人可以帮忙吗?谢谢。

4

3 回答 3

0

因为您正在尝试%在搜索条件中使用通配符,LIKE这意味着将%字符连接到$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;
}
于 2013-09-29T20:25:43.307 回答
0
  1. 替换$query=$_GET[$md]$query=$_GET['date']

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

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

于 2013-09-29T22:18:02.723 回答
-1

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

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

%   Matches any number of characters, even zero characters
_   Matches exactly one character
于 2013-09-29T20:34:01.757 回答