Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysqli用between子句准备语句_Php_Mysql_Mysqli_Prepared Statement - Fatal编程技术网

Php mysqli用between子句准备语句

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

我的问题类似于[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['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
。把时间放在日期上没有任何区别,行为和以前一样。。。