按日期过滤数据库字段

时间:2013-11-14 19:42:45

标签: php mysql date

我有一个显示用户活动的页面,我已经构建了一个表单,用户可以按日期过滤此表单。

这是表格

<form action='filter_activity.php' method='get'>
    From: <input type='text' name='from' value='dd/mm/yyyy'>
    To: <input type='text' name='to'  value='dd/mm/yyyy'>
    <input type='submit' value='Filter'> 

以下是filter_activity.php页面:

$from=$_GET["from"];
$to=$_GET["to"];

$result=mysql_query("SELECT * FROM member WHERE personID=$user AND created between $from and $to ");

然而,这没有任何表现,任何人都可以帮忙吗?

3 个答案:

答案 0 :(得分:2)

您发布的日期格式无效,无法使用数据库。您需要在使用之前将它们转换为DB。

$from = DateTime::createFromFormat('d/m/Y', $_GET['from']);
$to   = DateTime::createFromFormat('d/m/Y', $_GET['to']);

$sql = "
    SELECT * 
    FROM member 
    WHERE personID = $user AND created BETWEEN '%s' AND '%s'
";
$sql = sprintf($sql, $from->format('Y-m-d'), $to->format('Y-m-d'));

另外,您应检查是否存在$_GET密钥,然后检查$from$to是否为DateTime对象,而不是false

答案 1 :(得分:0)

你需要把它投射到日期,如:

$result=mysql_query("SELECT * FROM member WHERE personID=$user AND created BETWEEN DATE('$from') AND DATE('$to')") or die(mysql_error());

来自网站:

为了在将BETWEEN与日期或时间值一起使用时获得最佳效果,请明确使用CAST() 将值转换为所需的数据类型。示例:如果将DATETIME与两个进行比较 DATE值,将DATE值转换为DATETIME值。 如果在与DATE的比较中使用字符串常量(如“2001-1-1”), 将字符串转换为DATE。

答案 2 :(得分:0)

将正确的日期格式传递给DB:

$from = date('Y-m-d', strtotime(str_replace('/', '-', $_GET["from"])));
$to = date('Y-m-d', strtotime(str_replace('/', '-', $_GET["to"])));

$result = mysql_query("SELECT * FROM member WHERE personID=$user AND created BETWEEN '$from' AND '$to'");

真的考虑更改表单中的格式。我会使用日期选择器,年/月/日下拉菜单或javascript。

另外,请阅读有关引用,SQL注入等的其他注释。并获取mysql_ *函数。