我有两个文件,一个是显示我网站最新添加内容的页面,另一个是指向第一页的链接。
问题:如果我在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;
}
-
将
$query=$_GET[$md]
替换为$query=$_GET['date']
-
将
"%$query%"
替换为$query
(两者都是你们中的一些人所建议的:))
这是由于执行数组中的通配符%
,相等运算符=
是一个比较运算符,并将%
作为文字字符。
LIKE
是可以使用通配符的模式匹配。MySQL 5.7:字符串比较函数
% Matches any number of characters, even zero characters
_ Matches exactly one character