Php 防止租车双重预订

Php 防止租车双重预订,php,mysql,transactions,Php,Mysql,Transactions,我一直在网上搜索,现在需要一些澄清 我正在建立一个汽车租赁网站,客户可以在那里预订周末或一周的豪华汽车 我要解决的问题是,如何防止两个人在同一日期预订同一辆车。我已经阅读了有关交易的信息,并想确认它是如何运作的。我读了很多文章,但没有任何东西证实我认为它是如何工作的 事务启动后,是否会临时将数据插入数据库,从而阻止其他任何人插入相同的数据?或者它只是将插入存储在用户浏览器中,并且只在提交后才进行插入 交易听起来像是我需要的,但我只需要在继续之前确认一下。否则我需要另一个解决方案 提前感谢,我希望

我一直在网上搜索,现在需要一些澄清

我正在建立一个汽车租赁网站,客户可以在那里预订周末或一周的豪华汽车

我要解决的问题是,如何防止两个人在同一日期预订同一辆车。我已经阅读了有关交易的信息,并想确认它是如何运作的。我读了很多文章,但没有任何东西证实我认为它是如何工作的

事务启动后,是否会临时将数据插入数据库,从而阻止其他任何人插入相同的数据?或者它只是将插入存储在用户浏览器中,并且只在提交后才进行插入

交易听起来像是我需要的,但我只需要在继续之前确认一下。否则我需要另一个解决方案


提前感谢,我希望这对任何花时间阅读的人都有意义。

有两种方法可以解决此问题:

一个
唯一的
索引,包含汽车和预订时间,因此不可能用相同的组合创建两个记录:

INSERT INTO bookings (car_id, date, customer_id) VALUES (1, '2014-09-29', 1903)
如果在该日期已有预订,您的
插入将失败并出现错误。此处的
预订
表表示特定日期特定车辆的可用性,如果已预订,则表示预订的客户。您可能希望添加另一层来表示多日预订

或者,预订表上的标志通常为
NULL
,但可以在预订时设置,尽管您的更新检查它是否成功:

UPDATE bookings SET customer_id=1903 WHERE id=4535 AND customer_id IS NULL

这样,您就无法重新预订已预订的汽车。

有关参考信息,请参阅Thank@tadman这听起来是我需要做的事情。因此,如果我使用了您提到的相同想法,那么我将如何管理一个在这么多分钟后被放弃且未完成的预订,允许其他人预订汽车?如果您想预订如果未确认可能过期的预订,您可能需要在
列中添加类型为DATETIME的
reserved\u,以便定期发布任何未确认的预订。您需要一些常规任务来完成此任务,或者需要在尝试任何预订之前执行发布。两者都可以。