我们可以在Mysql Query中使用PHP函数strtotime吗?

时间:2014-07-04 06:32:37

标签: php mysql strtotime

我有以下MySQL语法,这给了我一个错误。

我知道您无法直接比较日期变量,因此我使用strtotime创建一个Unix时间戳来比较日期。

您可以在MySQL查询中使用PHP strtotime函数吗?

$result = select * from table where strtotime(Date) >= strtotime($_POST[DateFrom1])  
&& strtotime(Date) <= strtotime($_POST[DateTo1])";

5 个答案:

答案 0 :(得分:4)

您的代码必须是:

$result = "select * from table 
              where unix_timestamp(Date) >= unix_timestamp(".$_POST[DateFrom1].")  
&& unix_timestamp(Date) <= unix_timestamp(".$_POST[DateTo1].")";

要在mysql中的时间戳中转换日期,有函数unix_timestamp

答案 1 :(得分:3)

您的代码是NOT有效的PHP语法。下面的代码是一种干净,正确的方法:

$from = date('Y-m-d', strtotime($_POST["DateFrom1"]));
$to = date('Y-m-d', strtotime($_POST["DateTo1"]));
$query = "select * from table where date between '$from' and '$to'";
// use this query to your mysqli

答案 2 :(得分:3)

假设您的date字段属于datedatetime类型,那么您可以直接进行比较,而无需转换为时间戳。

此外,对于您的具体情况,您似乎可以使用 expr BETWEEN min AND max 操作,这相当于 min&lt; = expr AND expr&lt; = max

$result = "
    SELECT * FROM table
    WHERE date BETWEEN '" . date('Y-m-d', strtotime($_POST['DateFrom1'])) . "'
        AND '" . date('Y-m-d', strtotime($_POST['DateTo1'])) . "'";

SQLFiddle using type date

SQLFiddle using type datetime


注意:如果您将日期存储为varchar数据类型或datedatetime(或者timestamp)以外的其他数据,那么您应该考虑改变这一点,以便充分利用MySQL的功能。

答案 3 :(得分:2)

不,您需要使用here

所述的mysql函数UNIX_TIMESTAMP

所以也许就像

那样
$sql = "SELECT * FROM table WHERE UNIX_TIMESTAMP(date) >= '" . strtotime($_POST[DateFrom1]) . "' && UNIX_TIMESTAMP(date) <= '" . strtotime($_POST[DateTo1]) . "';";

更好的是使用Named Placeholders和PDO。

$db = new PDO('mysql:host=whateverHost;dbname=yourDB;charset=utf8', 'username', 'password');
$stmt = $db->prepare("SELECT * FROM table WHERE UNIX_TIMESTAMP(date) >= :dateFrom1 && UNIX_TIMESTAMP(date) <= :dateTo1");
$stmt->execute(array(':dateFrom1' => $_POST[DateFrom1], ':dateTo1' => $_POST[DateTo1]));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

使用PDO意味着您不必担心SQL注入等问题,并且它允许FAR更清晰的SQL语句,您不必将PHP中的值直接抛入SQL中。

答案 4 :(得分:0)

使用mysql的UNIX_TIMESTAMP()它可能就是你要找的东西。