【发布时间】:2019-07-25 22:25:18
【问题描述】:
这是我的问题...
我有一个显示航班详细信息的 SQL 表,例如到达日期、到达时间、出发日期、出发时间等... 现在,如果我想更新航班,我想确保航班日期与其他日期不匹配,例如:
如果我有一个名为 IFLY 的航班于 8 月 10 日抵达,8 月 14 日出发,同一航班于 8 月 16 日抵达,8 月 18 日出发,想象我想更新 8 月 13 日抵达的第二个航班,我应该得到如下响应:“您的航班无法到达在前一个还没有离开之前”。为此我做了...
if (isset($_POST['update'])) {
$regist = $_POST['reg'];
$arrivalDate = $_POST['adof'];
$departureDate = $_POST['ddof'];
$sql = "SELECT reg, adof, ddof FROM flights WHERE reg = '$regist' AND adof < $arrivalDate' order by ddof desc";//
$data = mysqli_query($conn, $sql);
if (mysqli_num_rows($data) > 0) {
foreach ($data as $key => $v) {
if ($v['ddof'] <= $arrivalDate) {
echo 'exists';
}
}
}
}
但不工作,因为当我更新时也在寻找我想要更新的航班。 如何解决,如何避免对当前条目的SQL查询?
【问题讨论】:
-
您将不得不查询以查看是否存在冲突。如果没有冲突,则更新。没有绕过它。但是您在这里遇到的问题不止一个:1) 您需要一个准确地让您知道是否可以更新的查询,2) 如何执行该查询然后更新。按此顺序求解。同时,您的代码可以通过使用含义明显的字段名称来大大改进,即“到达”、“出发”和(我不知道 reg 是什么意思)。您也对 sql 注入持开放态度:在继续之前,请弄清楚如何使用准备好的语句并始终使用它们。
-
在您的 SQL 中添加一个条件以忽略第一条记录或按日期对数据进行排序并忽略第一条返回的记录。