Php MySQL使用datetime健全性检查将行插入数据库
我正在制作一个会议室预订系统,在该系统中,开始日期和结束日期内不应有时间,因此理论上,验证应检查一个开始日期和结束日期时间范围内是否没有日期/时间 我有两个表,我可以插入其中,包括开始日期和结束日期,所以我现在感兴趣的列只有这些 会议室Php MySQL使用datetime健全性检查将行插入数据库,php,mysql,frameworks,Php,Mysql,Frameworks,我正在制作一个会议室预订系统,在该系统中,开始日期和结束日期内不应有时间,因此理论上,验证应检查一个开始日期和结束日期时间范围内是否没有日期/时间 我有两个表,我可以插入其中,包括开始日期和结束日期,所以我现在感兴趣的列只有这些 会议室 |------------------------------------||-bookingtime-|-bookingend-| 我理解健全性检查背后的原理以及我可以在psudocode中执行的检查。这是我到目前为止得到的代码- > p4a\u db::si
|------------------------------------|
|-bookingtime-|-bookingend-| 我理解健全性检查背后的原理以及我可以在psudocode中执行的检查。这是我到目前为止得到的代码- >
p4a\u db::singleton()->query(“插入到会议室(位置id、预订时间、预订id、梅罗诺id))
其中bookingtime<“$date.”和BookingAnd>“$date.”
或
bookingdate<“$date.”和BookingAnd>“$dateend.”
值(?,,,?)“,
数组($location、$date、$dateend、$merono));
我不想直接在语句中插入数据,但在我理解如何插入数据之前,我一直被卡住,所以问题是
如何在插入数据之前执行健全性检查,以便在预定时间内不获取日期
任何帮助都将不胜感激 编辑:
我一直在过度思考我的答案,我意识到旧的解决方案在您的案例中不起作用,因为您需要时间跨度,比较开始和结束日期是无用的
我的处理方法是:
Start经过长时间的密集搜索,我现在得到了一个此方法的工作示例,以及一个防止sql注入的方法,下面是代码
if ($this->BookingValue == 1)
{
$sql = "SELECT COUNT(*) as num FROM meeting_room_bookings
WHERE
(
(? < start_at AND ? > start_at)
OR
(? > start_at AND ? < end_at)
)
AND
meeting_room_id = ?";
$result = p4a_db::singleton()->fetchRow($sql, array($date, $date, $date, $dateend, $merono));
if ( 0 == $result["num"] )
{
p4a_db::singleton()->query("INSERT INTO meeting_room_bookings (start_at, end_at, meeting_room_id)
VALUES
(?,?,?)", array($date, $dateend, $merono));
return true;
}
else
{
return false;
if($this->BookingValue==1)
{
$sql=“选择COUNT(*)作为会议室预订中的num
哪里
(
(?start_at)
或
(?>起始点和<结束点)
)
及
会议室会议id=?“;
$result=p4a_db::singleton()->fetchRow($sql,array($date,$date,$date,$dateend,$merono));
如果(0==$result[“num”])
{
p4a_db::singleton()->查询(“插入会议室预订(开始、结束、会议室id))
价值观
(?,?,?)”,数组($date,$dateend,$merono));
返回true;
}
其他的
{
返回false;
关于这段代码没有太多的解释,但是根据差异(不包括表中列名的更改),现在在设置值之前就准备好了查询,然后可以在if
语句中使用它,从而允许在不同日期之间进行验证以过滤结果
除此之外,我还添加了验证,以通过和语句(其中会议室id限制为单个值)停止包含在该语句中的其他会议室的日期
虽然现在,这将导致一个单独的问题是另一个抛出的错误,来自此语句,但我知道插入是正确的,但此准备语句中的某些内容会导致错误:
SQLSTATE[HY093]:参数编号无效:绑定变量的编号与令牌的编号不匹配
文件:Pdo.php,第234行
虽然现在我正在调查从准备好的声明中抛出的错误,并将在出现修复时更新此答案,但感谢您的帮助。您是否可以先进行查询?从预订开始时间的会议室中选择*我不知道这就是为什么我要问XD请解释的原因?抱歉,我太快按了“回车”键。请参阅我的编辑。Helpful?你能给我一个答案让我想象一下吗(例如写一个示例代码)我将列设置为唯一的问题是,我有几个会议室,所有的列都可能重叠,这一点我完全忘记了,直到你提到:P我想我知道如何排序,但我不知道,直到我尝试:P哦,我在使用php框架,所以大部分我需要删除才能开始工作,我会回到你这里=]试试看,有很多方法可以解决这个问题:)(例如,存储房间号码和时间的组合)让if-else方法发挥作用,而不是其他任何方法(现在)人力资源管理我想知道我将如何获得结果的数量,我将查看文档,看看是否能找到任何东西。感谢帮助=]我想我知道你的意思,尽管通常你的任务是思考我给你的一些想法,请查看编辑后的答案:)下次一定要只问具体问题,而不是整个过程。
$emailexist = $mysqli->prepare("select email from users where email = ?");
$emailexist->bind_param('s', $email);
$emailexist->execute();
$emailexist->store_result();
if ($emailexist->num_rows > 0) {
$emailexist->close();
$mysqli->close();
return true;
}
else {
$emailexist->close();
$mysqli->close();
return false;
}
if ($this->BookingValue == 1)
{
$sql = "SELECT COUNT(*) as num FROM meeting_room_bookings
WHERE
(
(? < start_at AND ? > start_at)
OR
(? > start_at AND ? < end_at)
)
AND
meeting_room_id = ?";
$result = p4a_db::singleton()->fetchRow($sql, array($date, $date, $date, $dateend, $merono));
if ( 0 == $result["num"] )
{
p4a_db::singleton()->query("INSERT INTO meeting_room_bookings (start_at, end_at, meeting_room_id)
VALUES
(?,?,?)", array($date, $dateend, $merono));
return true;
}
else
{
return false;