php - 如何检查我的 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 上搜索了答案,但没有任何运气。
先感谢您。
解决方案
首先,您的代码似乎只查看SELECT语句返回的第一行。二、以下声明:
$nombre_table = $nombre_res == "5-8";
为$nombre_table分配True或False的值。您不能将 PHP计数函数应用于此类值,因此下一条语句将引发警告。在任何情况下,您都不会计算“5-8”出现在列nombre_personnes中的次数。为此,可以使用如下查询:
$requete = $idConnexion->query("SELECT count(*) AS cnt from tables WHERE nombre_personnes = '5-8'");
当然,在您读取计数和插入新行之间,是否有可能另一个进程已经修改了数据库,使得您读取的计数不再是最新的,并且您仍然会出现太多的 '5-8 '?在继续之前,您可能需要先锁定表以防止写入。
推荐阅读
- gcc - 将 xgboost 安装到 AWS EC2 Linux 实例
- c# - 通过实例化函数创建猎枪射击(Unity C#)
- firebase - Firebase Cloud Firestore 集合大小而不阅读每个文档?
- .net-core - 为 dotnetcore Windows 服务设置环境变量——仅限进程,而不是系统或用户
- asp.net-core - 尝试将 Redis Sentinel 与 Net Core 2.1 一起使用
- c++ - 为什么我在空指针错误(链表)中获得成员访问权限
- javascript - 我有两个数组。我想以一种可以从另一个数组中获取最接近的值的方式比较它们
- python - 按产品 pandas 计算连续天数
- javascript - Uncaught SyntaxError: Unexpected token '<' React nginx 错误
- python - 基于部分startswith匹配合并两个数据帧