テーブル内の日付をユーザーからの日付入力と比較するクエリに単純な問題があります。(生年月日が「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、およびその他の多くを試しましたが、すべて失敗しました。
- dob (生年月日) の表の形式は、「datetime」ではなく「date」です。
- ユーザー入力文字列の日付形式は、MySQL の日付形式 YYYY-MM-DD に変換されます。
- クエリは <、>、<=、>= で機能します。
どこが間違っていますか?
よろしくお願いします。