1

テーブル内の日付をユーザーからの日付入力と比較するクエリに単純な問題があります。(生年月日が「MM/DD/YYYY」の表に含まれるすべての人のリストを教えてください)。

新しい人をデータベースに入力するとき、その人がまだデータベースにいないことを確認したいと思います。したがって、「名」「姓」および「生年月日」を使用してテーブルがクエリされ、一致する場合は、ウィンドウがポップアップして、「これを実行してもよろしいですか - その人は既に入力されているようです」と表示されます。

「ファーストネーム」「ラストネーム」に問題はありません(私はうまく機能しています)ので、クエリに「生年月日」を追加したいと思います。まず、「名」と「姓」を削除し、「生年月日」のみを使用しています。

「概念実証」として、次の MySQL クエリは MySQL Workbench で正常に動作します。

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

表の「dob」列は、「datetime」ではなく「date」形式です。

そこで、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)); によって日付形式に変換されます。

「echos」は、変換が正しいことを示しています。「echo $dob」は、1934-06-06 を示しています。

クエリは <=、>=、<、> で正常に機能し、他のすべて =、==、===、>=$date AND <=$date、およびその他の多くを試しましたが、すべて失敗しました。

  1. dob (生年月日) の表の形式は、「datetime」ではなく「date」です。
  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 に答える
-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);
于 2013-09-17T12:20:05.290 に答える