我有两个文件,一个是显示我网站最新添加的页面,另一个是指向第一页的链接。
问题:如果我在like
中包含=
关键字而不是sql
,则查询有效。但是,当我使用=
(这就是我想要的)时,它会返回零行。
代码段:
echo "On " . max($last_date) . ", we had <a href='/latest-txt.php?date=$md'>" . count($last_posts) . "</a> text posts!"
$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>";
任何人都可以帮忙吗?感谢。
答案 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)
将$query=$_GET[$md]
替换为$query=$_GET['date']
将"%$query%"
替换为$query
(两者都有人建议:))
答案 2 :(得分:-1)
由于执行数组中的%
通配符,Equal Operator =
是一个比较运算符,并将%
作为文字字符。
LIKE
是可以使用通配符的模式匹配。 MySQL 5.7: String Comparison Functions
% Matches any number of characters, even zero characters
_ Matches exactly one character