如何检查我的sql表中的重复条目?

时间:2019-05-30 15:31:18

标签: php mysql

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

为了简单起见,我现在要检查的只是所讨论的“座位表”是否已经在数据库中超过2次,如果进行了第三次尝试,我想显示错误消息,但是我似乎无法弄清楚如何检查我的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上搜索了答案,但是没有任何运气。

谢谢。

2 个答案:

答案 0 :(得分:0)

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

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

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

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

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

答案 1 :(得分:-2)

您必须在表中放置一个ID(ID int NOT NULL AUTO_INCREMENT,),以便您的表具有一个ID,这将确保每个表都是唯一的。 当有人尝试进行预订时,您将拥有表的ID,并将其与预订进行比较,这样就不能拥有两个相同的表。