MySQL和PHP查询日期= $ date问题

时间:2013-09-17 12:08:07

标签: php mysql date where-clause

我遇到一个简单的问题,即查询将表中的日期与用户输入的日期进行比较。 (给我一份表格中所有人的列表,其中包括生日“MM / DD / YYYY”)。

当我将新人输入数据库时​​,我想验证该人员是否已经在数据库中。因此,使用“名字”,“姓氏”和“出生日期”,查询表格,如果匹配,则弹出一个窗口并说“你确定要这样做 - 看起来已经输入了人”。

没有“名字”“姓氏”的问题(我已经很好地工作了)所以现在我想在查询中添加“出生日期”。首先,我删除了“名字”和“姓氏”,我只使用“出生日期”。

作为“概念证明”,以下MySQL查询在MySQL Workbench上运行良好:

SET @testdate = "1934-06-06";
SELECT localid, firstname, lastname, dob FROM administrative WHERE dob = @testdate;

表中的“dob”列是“日期”格式,而不是“日期时间”。

所以我现在切换到php并将其写为测试:

$frontenddob = "06/06/1934";
$dob = date("Y-m-d", strtotime($frontenddob));

echo "--$frontenddob--<br>"; //gives 06/06/1934
echo "--$dob--<br><br>";     //gives --1934-06-06-- ("--" added to "see" extra spaces)
echo "$dob"; echo "<br>";    //gives 1934-06-06

$host = "xx";
$user = "xx";
$password = "xx";
$dbname = "xx";

$cxn = mysqli_connect($host,$user,$password,$dbname);
if (mysqli_connect_errno()) {echo "No connection" . mysqli_connect_error();}

$query = " SELECT * FROM administrative WHERE dob = $dob ORDER BY lastname ASC  ";

用户以mm / dd / yyyy格式输入日期字符串。

它按日期转换为日期格式(“Y-m-d”,strtotime($ frontenddob));.

“回声”表明转换是正确的 - “echo $ dob”给了我1934-06-06。

该查询可以正常使用&lt; =,&gt; =,&lt;,&gt;我已经尝试了其他一切=,==,===,&gt; = $ date AND&lt; = $ date,以及其他一大堆 - 都不成功。

  1. 表格中的dob(出生日期)格式为“日期”而非“日期时间”。
  2. 用户输入字符串日期格式转换为MySQL日期格式YYYY-MM-DD。
  3. 该查询适用于&lt ;,&gt;,&lt; =,&gt; =。
  4. 我哪里错了?

    我提前感谢你。

3 个答案:

答案 0 :(得分:5)

尝试:

$query = " SELECT * FROM administrative WHERE dob = '$dob' ORDER BY lastname ASC  ";
                                                    ^    ^

请注意$dob附近的单引号。

答案 1 :(得分:0)

我一直在玩strtotime vs explode的概念,并在另一个线程中学到了strtotime直到12/13/1901。所以为了帮助像我这样的其他新手,根据亚历山大的建议,我写了几行来证明两者之间的差异。有趣的是在1901-12-13和1901-12-14我输入了PHP代码的第一行。再次感谢大家!

<?php $dob = "1901-12-14"; ?>
<html>
<head>
<style>

.inputdiv {
    width:200px;
    margin:100px auto 10px auto;
    background-color:#CCC2FC;
    text-align:center;
    border:1px solid transparent;}

.spacer{
    width:199px;
    margin:20px auto 20px auto;}    

</style>
</head>
<body>

<div class="inputdiv">
  <div class="spacer"><?php echo "Raw dob: ".$dob ?></div>
  <div class="spacer"><?php echo "Strtotime dob: ".date("m-d-Y", strtotime($dob)) ?></div>
  <div class="spacer"><?php list ($y, $m, $d) = explode('-', $dob);
                        $dob = sprintf("%02d-%02d-%04d", $m, $d, $y);
                        echo "Explode dob: ".$dob ?></div>
</div>
</body>
</html>

答案 2 :(得分:-2)

除了使用引号外,尽量避免在BIRTHDAY中使用strtotime,因为它会生成时间戳(IT STARTS FROM YEAR 1970)。尝试使用explode()例如

$frontenddob = "12/06/1934";
list ($m,$d,$y) = explode('/', $frontenddob);
$dob = sprintf("%04d-%02d-%02d", $y, $m, $d);