php/Codeigniter——如何通过排除时间来仅比较日期

Posted

技术标签:

【中文标题】php/Codeigniter——如何通过排除时间来仅比较日期【英文标题】:php/Codeigniter-- How to compare only date by excluding time 【发布时间】:2013-09-17 10:41:05 【问题描述】:

我的数据库表中有一个字段为creater_date 作为日期时间,并且值以2013-09-13 02:12:44 的形式存储

现在我必须将今天的日期(没有时间)与creater_date 表字段进行比较。

我尝试了下面的代码,但它显示错误:

 function check_existing_User_weightStatus($u_id)
 
    $this->load->database();
    $this->load->helper('date');  
    $today = date('Y-m-d');
    $array = array('creater_id' => $u_id,DATE('created_date') => $today);
    $this->db->where($array); 
    $query = $this->db->get('user_weight');
    if ($query->num_rows() > 0) 
        return true;
     else 
        return false;
     
 

出现错误:

 A Database Error Occurred

 Error Number: 1064

 You have an error in your SQL syntax; check the manual that corresponds to your mysql server version for the right syntax to use near '13 Sep 2013 02:48:27 +0530Asia/Calcuttaam30Asia/Calcutta13_13am30Asia/Calcutta '' at line 4

 SELECT * FROM (`user_weight`) WHERE `creater_id` = '3235' AND `2013-09-13T02:48:27+05:30Fri,` 13 Sep 2013 02:48:27 +0530Asia/Calcuttaam30Asia/Calcutta13_13am30Asia/Calcutta '2013-09-13'

 Filename: D:\xampp\htdocs\webapp\system\database\DB_driver.php

 Line Number: 330

我不想和时间比较,我只想和今天的日期比较。字段 created_date(例如 2013-09-13 02:12:44)具有带有一些时间值的 datetime 数据类型。但我只想与日期进行比较

【问题讨论】:

不要从 php 到 db 往返日期。使用本机比较,例如creater_id=curdate(). @MarcB 抱歉,don't round-trip dates 是什么意思?你能详细说明一下吗? 请考虑 PHP 可能会在晚上 11:59:59 生成日期,但查询要到第二天凌晨 12:00:00 才会运行。当数据库可以为您完成时,不要让 PHP 生成日期,并使用正确的“当时”日期。 @MarcB 是的,我明白了。所以为此我必须编写一些与 sql 相关的代码。我认为您是经验丰富的人,如果您可以为此发布答案,对我来说将是非常准确的帮助 mostafa 在下面发布了答案。 【参考方案1】:

问题在于您的代码生成了错误的 SQL 语法,如错误所示。

我不是codeIgniter的专家,但这里是如何直接进行普通查询,这可能是你想要做的:

function check_existing_User_weightStatus($u_id)
 
    $today = date('Y-m-d');
    $this->load->database();
    $query = $this->db->query("SELECT * FROM `user_weight` WHERE `creater_id` = '$u_id' AND DATE(`created_date`) = '$today'");

    if ($query->num_rows() > 0) 
        return true;
     else 
        return false;
     
 

您的代码中的错误发生在这一行

$array = array('creater_id' => $u_id,DATE('created_date') => $today);

我很确定这不是 where 子句的执行方式,因此您可以查找 codeIgniter 文档!找到正确的方法来做到这一点! (您没有告诉 where 子句使用 ANDOR 等运算符)

【讨论】:

啊我明白了,我刚刚更新了代码,告诉我进展如何 你需要提供更多数据,你能显示调试信息吗?还是在返回 true/false 之前回显 $query 的内容? 我解决了这个问题,实际上你必须更新你的代码,你上面的代码是不完整的。添加 $today = "'".date('Y-m-d')."'"; 这个代码而不是你的 $today = date('Y-m-d'); & 最后添加 ` 最后添加这个->> DATE(created_date) PHP 是一种解释性脚本语言,它没有以任何方式编译,非常有限的编辑器实际上可以进行断点编辑.. 但您可以尝试 xdebug.org 或 firephp.org 我认为现在你必须删除所有这些评论,这样这个答案才会看起来干净整洁【参考方案2】:

您的数组语法错误。

<?php $array = array('creater_id'=>$u_id,'DATE(created_date)>=' =>$today);  ?>

【讨论】:

以上是关于php/Codeigniter——如何通过排除时间来仅比较日期的主要内容,如果未能解决你的问题,请参考以下文章

如何在视频上传时创建缩略图? [php/codeigniter]

自过去几天以来通过gmail发送电子邮件的问题php codeigniter

从 URL 中删除 index.php (CodeIgniter)

如何在 PHP Codeigniter 框架中创建错误日志 [重复]

如何在php/codeigniter或mysql中获得两个相差20分钟的日期的所有组合

如何在 PHP Codeigniter 中获取 40 岁以上的人员列表