Php mysqli用between子句准备语句
我的问题类似于[this][1],但这里提供的解决方案对我不起作用。 我有一个DB,我有一个名为Php mysqli用between子句准备语句,php,mysql,mysqli,prepared-statement,Php,Mysql,Mysqli,Prepared Statement,我的问题类似于[this][1],但这里提供的解决方案对我不起作用。 我有一个DB,我有一个名为出生的列,其中包含的日期格式为年-日-月00:00:00。现在我想从数据库中提取出生日期在两个日期之间的所有记录。 birth值已使用此代码插入数据库中 $date = $day . "-" . $month. "-" . $year; $a = strptime($date, '%d-%m-%Y'); $DB_date = date('Y-m-d H:i:s',mktime(0, 0, 0, $a
出生
的列,其中包含的日期格式为年-日-月00:00:00
。现在我想从数据库中提取出生日期在两个日期之间的所有记录。
birth
值已使用此代码插入数据库中
$date = $day . "-" . $month. "-" . $year;
$a = strptime($date, '%d-%m-%Y');
$DB_date = date('Y-m-d H:i:s',mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900));
要提取我使用此代码的日期,请执行以下操作:
$stmt = $conn->prepare('SELECT * FROM database WHERE `birth` BETWEEN ? AND ?');
$start_date = '1990-01-01';
$stop_date = '1995-01-01';
$stmt->bind_param('ss',$start_date,$stop_date);
$stmt->execute();
$result = $stmt->get_result();
但是它没有发现任何东西,因此
$result->num_rows
等于0
,并且它没有给出任何错误,因此问题一定是在日期的比较中 出生列格式为y-d-m小时分钟秒。但在where子句中,您忽略了小时-分钟-秒因素
替换:
$start_date = '1990-01-01';
$stop_date = '1995-01-01';
为此:
$start_date = '1990-01-01 00:00:00';
$stop_date = '1995-01-01 00:00:00';
请尝试一下,并告诉我它是否有效我找到了解决方案
如果数据库中列的数据类型为
datetime
,并且您还需要确保$start\u date
早于$stop\u date
,则我问题中的代码有效。我仍然想知道为什么它不能与日期
数据类型一起工作。我也有同样的问题。我发现另一个线程有同样的问题(不确定如何复制此线程)
但总而言之,
他们将参数的问号括起来,设法得到了想要的结果
$stmt = $conn->prepare('SELECT * FROM database WHERE `birth` BETWEEN (?) AND (?)');
$start_date = '1990-01-01';
$stop_date = '1995-01-01';
$stmt->bind_param('ss',$start_date,$stop_date);
$stmt->execute();
$result = $stmt->get_result();
希望这能有所帮助。您能从表格中显示一些示例数据吗?(顺便问一下:为什么y-d-m而不是iso标准y-m-d,它具有可排序且不会让人困惑的优点?)您的列birth是DATETIME类型的,还是只是一个VARCHAR列,在其中以该格式存储日期?@GeraldSchneider
birth
的类型是date
,与您的示例不匹配,不能在日期列中存储时间。这与日期时间列无关。如果字段类型为DATETIME,则必须在日期时间值之间进行比较,而不仅仅是在日期之间进行比较。birth
的数据类型为DATE
。把时间放在日期上没有任何区别,行为和以前一样。。。