Php PDO语句为date WHERE子句返回零行
我有两个文件,一个是显示我网站最新添加内容的页面,另一个是指向第一个页面的链接 问题:如果在Php PDO语句为date WHERE子句返回零行,php,mysql,pdo,Php,Mysql,Pdo,我有两个文件,一个是显示我网站最新添加内容的页面,另一个是指向第一个页面的链接 问题:如果在sql中包含like关键字而不是=,则查询有效。但是,当我使用=(这就是我想要的)时,它返回零行 代码片段: front-page.php echo“开”。最大值($last_date)。“,我们有文字帖子!” 最新版本-text.php $query=$\u GET[$md]; $stmt=$db->prepare(“从$db_tb_name中选择*,其中$db_tb_atr_name 5=?按兰德订
sql
中包含like
关键字而不是=
,则查询有效。但是,当我使用=
(这就是我想要的)时,它返回零行
代码片段:
front-page.php
echo“开”。最大值($last_date)。“,我们有文字帖子!”
最新版本-text.php
$query=$\u GET[$md];
$stmt=$db->prepare(“从$db_tb_name中选择*,其中$db_tb_atr_name 5=?按兰德订购(),限制为0,15”);
if($stmt->execute(数组(“%$query%”)){
回应“搜索结果”;
而($data_fetch=$stmt->fetch(PDO::fetch_ASSOC)){
回声“”;
呼应“作者:”;
回波子序列($data_fetch[$db_tb_atr_name2],0160),“”,“”;
回声“标签:”;
echo substr($data_fetch[$db_tb_atr_name3],0160),”;
//echo substr($data_fetch[$db_tb_atr_name4],0160),”;
回声“;
回声“信息:”;
echo substr($data\u fetch[$db\u tb\u atr\u name],0160);
回声“;
//echo substr($data\u fetch[$db\u tb\u atr\u name],0160);
回声“
”;
}
}
回声“;
有人能帮忙吗?谢谢。因为您尝试在搜索条件中使用
%
作为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(数组(“%$query%”)更改为$stmt->execute(数组($query))
我建议您更改绑定参数的方式
写
在执行和执行之前
if($stmt->execute())
{
...
}
除此之外,我们还必须知道$query
和$md
的值
因此,尝试一下$\u 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=$\u GET[$md];
$stmt=$db->prepare(“从$db_tb_name中选择*,其中$db_tb_atr_name 5=?按兰德订购(),限制为0,15”);
$stmt->bindValue(1$query,PDO::PARAM_STR);
$stmt->execute();
{
回应“搜索结果”;
而($data_fetch=$stmt->fetch(PDO::fetch_ASSOC))
{
回声“”;
呼应“作者:”;
回波子序列($data_fetch[$db_tb_atr_name2],0160),“”,“”;
回声“标签:”;
echo substr($data_fetch[$db_tb_atr_name3],0160),”;
回声“;
回声“信息:”;
echo substr($data\u fetch[$db\u tb\u atr\u name],0160);
回声“;
回声“
”;
}
}
回声“;
}
捕获(PDO异常$pdoe)
{
扔$pdoe;
}
这是由于执行数组中的%
通配符,=
是一个比较运算符,并将%
作为文字字符
类似于
是可以使用通配符的模式匹配
将$query=$\u GET[$md]
替换为$query=$\u GET['date']
用$query
替换“%$query%”
(正如你们中的一些人所建议的:)如果你想使用通配符,你必须像使用
一样使用。在使用=
符号时删除两个%
符号当然,这是PDO的错。是否验证$query
变量中的内容?@adeoba您的$db\u tb\u atr\u name5
列的数据类型是什么?如果是DATETIME
,则使用=
将不起作用<代码>2013-06-15 14:00:00≠ 2013-06-15
@Spero数据类型为date删除通配符恐怕无效$查询=2013-06-15$md=max($last_date)。使用bindValue仍然会给出零行。我不想使用['date'],因为我想要最新的日期。@adeoba$\u GET[$md]等于$\u GET['date'],不是吗?如果你要投否决票,请留下评论/更改建议。
$stmt->bindValue(1, $query, PDO::PARAM_STR);
if($stmt->execute())
{
...
}
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;
}
% Matches any number of characters, even zero characters
_ Matches exactly one character