Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO语句为date WHERE子句返回零行_Php_Mysql_Pdo - Fatal编程技术网

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