首页 > 解决方案 > 如何检查我的 sql 表中的双重条目?

问题描述

我是编程新手,还在学习。我在 mySQL 中创建了一个数据库来存储虚构餐厅的预订。我的网站表单启动并运行,当您输入您的信息(电子邮件/所需座位/日期/小时)时,它会注册并成功输入数据库。但是现在我正在尝试检查我的数据库中是否有重复条目,然后向我的客户发送一条消息说“对不起,该表已被预订,请选择其他时间或日期”

只是为了简单起见,我现在要检查的是是否有问题的“座位表”已经在数据库中超过 2 次,如果进行第三次尝试,我想出现错误消息,但我可以' t 似乎弄清楚如何检查我的 sql,这是我现在拥有的代码......我正在检查的列是座位表“5-8”人,我的选择是 1-2、3- 4 和 5-8。5-8是sql表列中写成“文本”的内容

require_once("config.php.inc");

$idConnexion = new mysqli($serveur, $utilisateur, $motDePasse, $bd, $port);

if ($idConnexion->connect_error) {
    die('Erreur de connexion (' . $idConnexion->connect_errno . ') ' .$idConnexion->connect_error);
}

$requete = $idConnexion->query("SELECT * FROM tables") or die("La requete a echouee!");
$tableau = $requete->fetch_array();
$heure_res = $tableau["heure"];
$date_res = $tableau["date_res"];
$nombre_res = $tableau["nombre_personnes"];

if (($tableau = $requete->fetch_array()) !=FALSE) {
    $nombre_table = $nombre_res == "5-8";
    if (count($nombre_table) >= 2) {
        echo "Il n'y a plus de place, choisissez une autre heure ou date.";
    } else {
        $resultats = $idConnexion->query("INSERT INTO `tables` SET email = '$_GET[email]', nombre_personnes ='$_GET[nombre_personne]', date_res = '$_GET[date_res]', heure = '$_GET[heure_preference]'") or die("La requête a échouée! : (" . $idConnexion->errno . ") " . $idConnexion->error);
        $message = "L'ajout de la réservation a été fait avec succès!";
        include("succes_interface.php");
    }
}

一旦我获取数组,我会尝试查看“5-8”是否在数据库中超过两次,以返回错误,如果小于 2,则 PHP 可以继续并将保留添加到数据库。

我真的希望我问的是正确的问题,我已经在 StackOverflow 上搜索了答案,但没有任何运气。

先感谢您。

标签: phpmysql

解决方案


首先,您的代码似乎只查看SELECT语句返回的第一行。二、以下声明:

$nombre_table = $nombre_res == "5-8";

为$nombre_table分配TrueFalse的值。您不能将 PHP计数函数应用于此类值,因此下一条语句将引发警告。在任何情况下,您都不会计算“5-8”出现在列nombre_personnes中的次数。为此,可以使用如下查询:

$requete = $idConnexion->query("SELECT count(*) AS cnt from tables WHERE nombre_personnes = '5-8'");

当然,在您读取计数和插入新行之间,是否有可能另一个进程已经修改了数据库,使得您读取的计数不再是最新的,并且您仍然会出现太多的 '5-8 '?在继续之前,您可能需要先锁定表以防止写入。


推荐阅读