我有一个订单页面,当你可以订购汽车。我有两个功能,一个到一个订单检查。
My函数:
function reserveer($resvan,$restot,$autoid){
$con = new Core();
$con->connect();
$sql = 'INSERT INTO reservering (resvan, restot,autoid) VALUES (?,?,?)';
if ($stmt = $con->myconn->prepare($sql))
{
$stmt->bind_param('ssi', $resvan, $restot,$autoid);
$stmt->execute();
$stmt->close();
}
else{
die("errormessage: " . $con->myconn->error);
}
}
我的检查函数:
function check($resvan, $restot,$autoid){
$con = new Core();
$con->connect();
$errmsg = array();
$sqlres = 'SELECT * FROM reservering WHERE resvan >= ? AND restot <= ? AND autoid=?';
if($stmt = $con->myconn->prepare($sqlres)){
$stmt->bind_param('ssi', $resvan, $restot,$autoid);
$stmt->execute();
$stmt->store_result();
}
if ($stmt->fetch()){
$errmsg[] = "already exists!";
return $errmsg;
}
}
但我的代码有个缺陷。当某人从2001-01-01到2001-01-15之间订货时,它就被正确地插入.当有人在2001-01-02到2001-01-14之间下订单时,它也会被插入。我以为这样能行。我也尝试过在之间使用sql,但这也不起作用。
所以我的问题是,我怎样才能做一个正确的检查?我没有错误。
我的桌子设置:
发布于 2016-04-15 01:35:55
当某人从2001-01-01到2001-01-15之间订货时,它就被正确插入。
我们有
resvan=2001-01-01
restot=2001-01-15
现在看看您的查询,它检查预订。
WHERE resvan >= ? AND restot <= ?
当某人从2001-01-02到2001-01-14之间订货时,它也会被插入。
因此,当这种情况发生时,您的查询变成
WHERE resvan >= 2001-01-02 AND restot <= 2001-01-14
这不返回副本,因为不存在这样的记录。你现有的记录日期从1月1日开始,而不是1月2日。
解决方案非常简单,您不想双订一辆车的日期,因为它已经预订了,所以只需提供一个日期,而不是两者都匹配。即使一场比赛没有重新登记
WHERE (
2001-01-02 BETWEEN resvan AND restot
OR 2001-01-14 BETWEEN resvan AND restot
)
AND autoid=?
现在试试那些新的约会
https://stackoverflow.com/questions/36643235
复制