php - SQL 选择/插入/更新查询 PHP MySQL

标签 php mysql

我有一个包含列 userID(int)、timeIN(date)、timeOUT(date) 的表

我正在mysql数据库中插入一条记录。首先,我检查另一个表中的 userID 是否正确,如果正确,它将添加 userID 和 timeIN(date) 的新记录,而 timeOUT 将为 NULL,否则如果 userID 不正确,它将显示错误。我希望我的代码能够检查用户当前是否处于 timeIN 状态,这样可以防止重复输入。如果 userID 的值等于用户输入且 timeIN 不为 null 并且 timeOUT 为 null,我还想插入或更新 timeOUT(date)。

请帮忙...谢谢。

这是我插入 userID 和 timeIN 的代码:插入 mysql 数据库时它可以工作。

<?php
if($_SERVER['REQUEST_METHOD']=='POST'){
require_once('dbConnect.php');

$userID = $_POST['userID'];
$sql = "SELECT * FROM employee WHERE userID='$userID'";
$result = mysqli_query($con,$sql);
$check = mysqli_fetch_array($result);

if(isset($check)){
    $sql = "INSERT INTO dtr (userID,timeIN) VALUES ('$userID', now())";
    mysqli_query($con, $sql);
    echo 'Time IN Successful!';
    }else{
        echo 'Invalid USER ID. Please try again!';
        }           
 mysqli_close($con);
}
?>

最佳答案

您应该在数据库内处理这些检查。您当前在数据库中进行的检查可以通过外键约束来处理:

alter table dtr add constraint fk_dtr_userId
    foreign key (userId) references employee(userId);

第二个意味着您只需要一行具有 NUL1 值。理想情况下,这可以通过唯一的约束来处理:

alter table dtr add constraint unq_dtr_userId_timeOut
    unique (userId, timeOut);

不幸的是(对于这种情况),MySQL 允许唯一约束使用重复的 NULL 值。因此,您可以执行以下两件事之一:

  • 使用默认值,例如“2099-12-31”表示超时。
  • 使用触发器来强制唯一性

无论哪种情况,数据库本身都会验证数据,因此无论数据如何插入或更新,您都可以对数据完整性充满信心。

关于php - SQL 选择/插入/更新查询 PHP MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41242556/

相关文章:

MySql - 选择UTC格式的时间戳列

sql - 是否存在版本控制数据库存储引擎?

javascript - PHP飞到购物车效果jquery ajax/我想提交表单但仍然是同一页面

php - htaccess 301 重定向 url

javascript - 模式隐藏上的 Bootstrap Active 选项卡

php - 使用 PDO 更新 MySQL 记录,但数据包含破坏 SQL 语法的字符串

javascript - 使用 PHP 和 REGEX 解析 JS 脚本以获取 JS 变量值

php - 什么是更好的网站本地化方法?

php - 如何在不获取模型内容的情况下附加相关模型中的 Eloquent 属性?

php - Mysql用户崩溃的情况