1

我在将表中的日期与用户输入的日期进行比较时遇到一个简单的问题。(给我一张表中所有生日为“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 的日期字符串。

通过 date("Ymd", strtotime($frontenddob)); 将其转换为日期格式。

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

该查询适用于 <=、>=、<、> 并且我已经尝试了其他所有方法 =、==、===、>=$date 和 <=$date 以及许多其他方法 - 均未成功。

  1. dob(出生日期)表中的格式是“日期”而不是“日期时间”。
  2. 用户输入字符串日期格式转换为 MySQL 日期格式 YYYY-MM-DD。
  3. 该查询适用于 <、>、<=、>=。

我哪里错了?

我提前谢谢你。

4

3 回答 3

5

尝试:

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

注意 . 周围的单引号$dob

于 2013-09-17T12:10:54.543 回答
0

我一直在玩一些 strtotime vs explode 的概念,并在另一个线程中了解到 strtotime 在 1901 年 12 月 13 日之前一直很好。因此,为了帮助像我这样的其他菜鸟,根据 Alexandr 的建议,我写了几行来展示两者之间的差异。将 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>
于 2013-09-18T20:05:02.863 回答
-2

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

$frontenddob = "12/06/1934";
list ($m,$d,$y) = explode('/', $frontenddob);
$dob = sprintf("%04d-%02d-%02d", $y, $m, $d);
于 2013-09-17T12:20:05.290 回答