在MySQLi和php中使用like命令作为datetime字段

时间:2013-10-25 13:11:53

标签: php datetime mysqli

我正在尝试根据日期运行查询以获取今天所有内容的更改,但是具有日期的字段是日期时间字段,我无法更改。我的date_modified字段中的值看起来像2013-10-25 07:05:43。我知道查询在没有日期的情况下工作。如果我只使用Navicat并将查询的where子句运行为:

WHERE  inventory.date_modified like '2013-10-25%'

运行正常。我在其他SO帖子中找到了一些想法,当我尝试将其放入我的php代码中时:

$today = date("Y-m-d");  $today = '%' . $today . '%';

然后我的where子句是:

WHERE inventory.date_modified like $today

我遇到了尝试解析非对象的致命错误。我知道今天有一个价值,但我不知道如何使用我的PHP代码执行此操作?

3 个答案:

答案 0 :(得分:0)

您忘记在数据库值上设置引号:

WHERE inventory.date_modified like '$today'

答案 1 :(得分:0)

试试这段代码: -

 $today = '2013-10-25';

 SELECT * FROM inventory  WHERE DATE_FORMAT(inventory.date_modified, "%Y-%m-%d") = $today;

答案 2 :(得分:0)

最佳解决方案是问题评论中的N.B.。因为,如果您在字段date_modified上有索引,则会使用它。

因此,如果您的日期格式为Y-m-d,就像您在$today中所做的那样,您可以这样做:

$sql = "
    ...
    WHERE inventory.date_modified BETWEEN '$today 00:00:00' AND '$today 23:59:59'
    ...
";

另一个例子是,使用DATE()函数从日期时间获取日期部分:

$sql = "
    ...
    WHERE DATE(inventory.date_modified) = '$today'
    ...
";

,如果您在字段date_modified上有索引,则此示例效果不佳,因为它将被忽略,并且将扫描整个表格。