SELECT
ユーザー入力に基づいてデータを mysql する必要があります。
たとえば、入力フォーム (フィールド) では、ユーザーは日、月、年を入力します。そして、入力された年月日と一致する mysql データを取得 (フェッチ) する必要があります。
これが私のコードです:
if (strlen($_POST['date_day'] > 0)) {
$post_date_day = $_POST['date_day'];
$date_day = 'RecordDay = ?';
}
if (strlen($_POST['date_month'] > 0)) {
$post_date_month = $_POST['date_month'];
$date_month = ' and RecordMonth = ?';
}
if (strlen($_POST['date_year'] > 0)) {
$post_date_year = $_POST['date_year'];
$date_year = ' and RecordYear = ?';
}
if ( strlen( $_POST['date_day'] or $_POST['date_month'] or $_POST['date_year'] ) > 0 ) {
$where = 'WHERE';
}
$sql_prepare = $where .$date_day .$date_month .$date_year;
$sql_execute = array($post_date_day, $post_date_month, $post_date_year);
$sql = $db->prepare("SELECT * FROM 2_1_journal $sql_prepare ");
$sql->execute($sql_execute);
$_POST['date_day'] と $_POST['date_month'] と $_POST['date_year'] の strlen が 0 より大きい場合、スクリプトは機能します。
しかし、たとえば、ユーザーが年を空白のままにすると (日と月に一致するすべての結果を表示したいため)、エラーが発生しますSQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
。
がトークンの数と一致しない理由がわかりません。なぜなら
if (strlen($_POST['date_year'] > 0)) {
$post_date_year = $_POST['date_year'];
$date_year = ' and RecordYear = ?';
}
if (strlen($_POST['date_year'] == 0) then $post_date_year と $date_year は空白なので、変数もトークンもありません。
解決策を得る私の方法が間違っている可能性があり、いくつかの良い作業方法があります.....