【发布时间】:2013-06-12 18:19:35
【问题描述】:
需要SELECTmysql数据根据用户输入。
例如,在输入表单(字段)中,用户输入日、月、年。并且需要获取(fetch)与输入的日月年匹配的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 = ?';
}
我想如果 (strlen($_POST['date_year'] == 0) 那么 $post_date_year 和 $date_year 是空白的;所以没有变量,也没有令牌。
可能我的解决方法是错误的,有一些好的工作方法.....
【问题讨论】:
-
strlen($_POST['date_year']) > 0