我的mysql数据库中有一个varchar列,它用逗号而不是连字符存储日期。
我想通过比较这些日期和当前日期来获取一些数据。为了获得当前日期,我使用php5方法 date("Y,m,d");
宣布它是 $date;
如果当前日期小于给定行的日期,则我希望检索它,否则从结果集中忽略它。
这是我的密码
$date=date("Y,m,d"); //current date to check if expiry date is valid or not
try {
$conn = new PDO("mysql:host=******;dbname=******", $username, "******");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = "select id, discount, expirydate, description, logouploader from table WHERE expirydate>= ? LIMIT 10";
$statement = $conn->prepare($query);
$statement->execute(array($date));
foreach($statement->fetchAll(PDO::FETCH_ASSOC) as $row) {
echo $row['expirydate'];
}
}
catch(PDOException $e)
{
echo "Connection failed: " . $e->getMessage();
}
$conn = null;
我的代码不比较日期;它获取所有行,即使它应该保留那些小于 $date;
//当前日期
如何筛选结果集以仅返回尚未过期的行?
2条答案
按热度按时间kknvjkwl1#
坏消息是:您的代码受到了糟糕数据库设计的影响。如果要存储日期值,请不要将其存储在日期类型列以外的任何列中。
好消息是:即使你不修复你的数据库结构(你真的,真的应该),你也不需要任何php来让你的查询工作。事实上,您甚至不需要使用准备好的语句,因为没有要包含的变量。
代码:(sqlfiddle演示)
这将产生所有尚未过期的折扣行(按日期排序)。
您可能会注意到:
你不需要重新格式化
expirydate
在ORDER BY
子句,因为它被精确地排序为字符串。我可以很容易地调用replace()而不是str -to -date(),将逗号分隔的日期格式化为连字符分隔的日期。
date\u format()将为您在结果集中设置日期格式提供极大的灵活性,这样您的php就可以进行较少的处理。
yv5phkfx2#
使用explode将日期字符串转换为数组,然后重新赋值日期字符串。