首页 > 解决方案 > 在 MYSQL 中验证 DATE

问题描述

我有一个小问题。

我该怎么做:客户将数据添加到表格 在此处输入图像描述

如果现有的 DATA 是由另一个客户端设置的,我想检查 MYSQL。

所以,在这张照片中,你可以看到我不想成为

在此处输入图像描述 我想返回一些 MESSAGE 对客户说请更改另一个 DATE

标签: phpmysql

解决方案


属于日期的时候,使用php和mysql的日期时间函数。

首先使用DATE类型列在数据库中存储日期。一个简短的例子,如何声明一个DATE列。此示例包含UNIQUE日期DATE列的约束,因此一个值只能在此列中存储一次。

CREATE TABLE example (
    id INT AUTO_INCREMENT PRIMARY KEY,
    description VARCHAR(50) NOT NULL,
    start_date DATE NOT NULL UNIQUE,
);

请记住,这是一个示例表。DATE现在,您可以在本专栏中完成您要求的所有事情。

现在你必须在 PHP 端处理你的日期格式。我猜日历应用程序会发布日期格式,如图所示d/m/Y。这种格式是可以接受的,但不适用于处理数据库或 php 代码中的日期。主要使用格式Y-m-d。这种格式适合您的数据库的需要。

以下示例采用格式为您的日历日期的 post 参数,并从中d\m\Y创建一个 phpDateTime对象。

$data = $_POST['date']; // your date in d/m/Y format like 20/05/2021
$date = DateTime::createFromFormat('d/m/Y');

if ($date === false) {
    throw new Exception('The given date is not in the expected format d/mY.');
}

// create the desired format for the database
$value = $date->format('Y-m-d');

// check for this date in your database
$sql = "SELECT id FROM example WHERE start_date = :start_date";
$statement = $pdo->prepare($sql);
$statement->bindValue(':start_date', $value);
$statement->execute();

// fetch a possible result
$row = $statement->fetch(PDO::FETCH_ASSOC);

// ongoing further processing
var_dump($row);

上面的示例PDO用于从 mysql 数据库中获取数据。无论您使用什么数据库适配器,该过程都保持不变。在数据库表中声明一个唯一DATE列,使用数据时间函数和类并检查数据库中的现有日期。

PS:您不必从数据库中预先选择。另一种方法可能是在尝试插入具有现有日期值的数据集时获取错误。根据数据库表中日期列的唯一约束,您的插入会导致错误。如果在这种情况下抛出异常,您可以通过使用类似ON DUPLICATE KEY UPDATEsql 查询或使用数据库适配器周围的 try/catch 块捕获插入语句上的错误来避免这种行为。


推荐阅读