mysqli用between子句编写语句

时间:2016-01-21 11:37:10

标签: php mysql mysqli prepared-statement

我的问题类似于[this] [1],但那里提供的解决方案对我不起作用。 我有一个数据库,我有一个名为birth的列,其中包含year-day-month 00:00:00格式的日期。现在我想从DB中提取出生在两个日期之间的所有记录。 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并且它不会出现任何错误,因此问题必须在日期的比较中。

3 个答案:

答案 0 :(得分:0)

出生列格式为y-d-m hour min sec。但是在你的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';

请尝试一下,让我知道它是否有效

答案 1 :(得分:0)

我找到了解决方案

如果数据库中列的数据类型为datetime,则我的问题中的代码有效,您还需要确保$start_date早于$stop_date。我仍然想知道它为什么不能使用date数据类型。

答案 2 :(得分:0)

我有同样的问题。我发现了另一个存在相同问题的线程(不确定如何复制该线程)here 但是,总而言之,

通过将参数的问号括起来,他们设法获得了预期的结果。

$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();

希望这会有所帮助。