需要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,则脚本有效。
但是,例如,如果用户将 year 留空(因为想要查看匹配日期和月份的所有结果),我会收到 error 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 = ?';
}
我想如果 (strlen($_POST['date_year'] == 0) 那么 $post_date_year 和 $date_year 是空白的;所以没有变量,也没有令牌。
可能我获得解决方案的方法是错误的,并且有一些好的工作方法.....