我正在将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。
答案 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')
在这种情况下都是无效的:
'1995-02-27'
周围加了引号,则$date
将起作用:"SELECT event FROM LifeEvents WHERE event_date > '$date'"
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();
然后以相同的方式进行比较。