我在这个问题上看到了几个帖子,但我没有让它正常工作。我有一个PHP变量,我最初POST为字符串。为了能够处理一周的日期范围,我使用strToTime将其转换为日期时间格式(例如2013年7月22日回声为1374476400)。
我的表格的日期以Y-m-d格式存储为文本(例如,2013年7月22日存储为2013-07-22)。我需要运行一个查询来比较这两个值,以查找属于我一周范围内的日期,因此我尝试将该文本转换为datetime格式以进行比较。
这是我正在使用的SQL:
$wk_begin = $_POST['wk_begin'];
$wk_begin = strToTime($wk_begin);
$wk_end = $wk_begin + 8;
$sql = "SELECT * FROM myTable WHERE (DATE(date)>=$wk_begin AND DATE(date)<$wk_end)";
我没有收到任何错误,但我的查询没有选择任何记录,即使我知道表中有7个匹配的记录。所以我有两个问题:
1)有没有更好的方法来解决这个问题? 2)如果我在正确的轨道上,我怎样才能获得sql语句将基于文本的日期转换为一个大整数,以便我可以正确地进行比较。
感谢任何帮助。谢谢!
编辑:感谢您的所有建议。我已经更改了表格,以便日期以“日期”格式存储(不再有字符串)。这是更新的代码。仍然没有拿起任何价值观:
$wk_begin = $_POST['wk_date'];
$wk_end = $wk_begin + 7;
$sql = "SELECT * FROM Workouts WHERE 'date' BETWEEN '$wk_begin' AND '$wk_end'";
答案 0 :(得分:2)
date
是mysql中的保留字,用作反引号中的字段名称。
你的变量插入也需要用撇号
包围SELECT * FROM myTable WHERE (DATE(`date`)>='$wk_begin' AND DATE(`date`)<'$wk_end'
更好的解决方案(除了使日期字段成为date
字段)将在构建sql语句时使用db库的转义和引用机制。
此外,由于您以Y-m-d格式存储日期,因此迄今为止的演员表是不必要的,因为以这种方式格式化的日期的字符串比较评估与字符串相同。所以
$sql = "SELECT * from myTable WHERE `date` >= ".$db->quoteAndEscape($wk_begin)." and `date` < ".$db->quoteAndEscape($wk_end);
更新
基于this日期可以用作不带引号的字段名称。
答案 1 :(得分:0)
<?php
$wkbegin = $_POST['wk_begin'];
$wk_begin = strToTime($wkbegin);
$d=date('j', $wk_begin)+8;
$m=date('n', $wk_begin);
$y=date('Y', $wk_begin);
$wk_end = date('Y-m-d', mktime(0,0,0, $m, $d, $y));
$wkbegin = date('Y-m-d', $wk_begin);
$sql = "SELECT * FROM `myTable` WHERE `date`>='".$wkbegin."' AND `date`<'".$wk_end."'";
?>