比较变量和MySQL日期的日期

时间:2018-08-19 21:08:28

标签: php mysql

我正在将PHP中指定的日期与MySQL表中的日期进行比较,然后在PHP中回显所有带有日期的行。当我在SELECT命令中指定日期时,它可以正常工作,但是当我将其设置为变量时,它将不起作用。

我的PHP是:

  $sql = "SELECT event FROM LifeEvents WHERE event_date > '1995-02-27'";
  $result = $conn->query($sql);

  if ($result->num_rows > 0) {
      // output data of each row
      while($row = $result->fetch_assoc()) {
          echo $row["event"] . "<br>";
      }
  } else {
      echo "0 results";
  }
  $conn->close();

这正常。但是当我将SELECT替换为:

SELECT event FROM LifeEvents WHERE event_date > $date

它不再起作用。 对于该变量,我尝试同时使用它们:

$date = new DateTime('1995-02-27')

$date = '1995-02-27'

它们都不起作用。 MySQL中的数据类型为DATE。

4 个答案:

答案 0 :(得分:2)

对于字符串变量

John McDir Subordinates:
        • Jane Doe
                - Bob Jones
                - Ted Smith

        • Mary Fairchild
                - J. B. Fletcher
                        - Mick Fresh
                - Larry VanLast
                        - Hugh DeGreen

对于$date = '1995-02-27' $sql = "SELECT event FROM LifeEvents WHERE event_date > '$date'"; // this should work exactly as $sql = "SELECT event FROM LifeEvents WHERE event_date > '1995-02-27'"; 对象,这应该有效

DateTime

我建议您始终在处理日期和时间时设置时区,因为低估时区会导致非常严重的错误,尤其是在您的应用程序处理多个时区并且您拥有{{1} }数据库中的数据类型。

养成这样做的习惯

$date = new DateTime('1995-02-27')
$sql = "SELECT event FROM LifeEvents WHERE event_date > '" . $date->format(Y-m-d). "'";

答案 1 :(得分:1)

那是因为'1995-02-27'DateTime('1995-02-27')在这种情况下都是无效的:

    如果您在SQL查询中的'1995-02-27'周围加了引号,则
  1. $date将起作用:
    "SELECT event FROM LifeEvents WHERE event_date > '$date'"
  2. DateTime('1995-02-27')没有__toString()魔术方法,因此PHP无法将其表示为字符串。
    您必须使用format方法:{{1 }}(它仍然会遗漏引号)

一个或另一个解决方案,you need to protect yourself against SQL injections using prepared statements!而且您实际上将不再需要任何报价。

答案 2 :(得分:1)

让我们创建一个保存日期的变量,然后将其转换为MySQL可以理解的日期格式。

try (FileOutputStream fos = new FileOutputStream(fileDir); PrintStream ps = new PrintStream(fos)) {

    ....

}

然后更改所需的内容以满足您的需求。 希望我能进一步推动你。

答案 3 :(得分:-2)

尝试将Carbon librar y用于PHP。

使用PHP存储日期:

$current_time = Carbon::now()->toDateTimeString();

然后以相同的方式进行比较。