【发布时间】:2018-08-25 21:10:14
【问题描述】:
我目前正在使用 XAMPP 和 PDO 构建本地数据库。我让我的数据库按预期工作,除了我正在构建的 if/else 循环以防止重复项被发布到我的数据库中。我是 PDO 编码的新手,我最近才开始重新编码,所以如果我有一些看起来很奇怪的代码,请耐心等待。只是为了澄清,我不是在寻找一个简单的“这里拿这个代码”,因为我真的很想了解它是如何工作的。
$conn = new PDO("mysql:host=$servername;dbname=$db", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dupe = $conn->prepare("SELECT starttime FROM missions GROUP BY starttime HAVING COUNT(starttime) > 1"); //Query för att kolla efter dubbletter i databasen. Denna fungerar i PHPmyadmin/SQL
$dupe->execute(); // Exekvera SQL query för dubbletter
// If/else loop som ser till att det inte kan postas några dubbletter. Om den märker av att det finns en liknande post i DB så körs ej execute.
if($duperesult = $dupe->fetchAll()) {
$sql = "INSERT INTO missions (startdate, starttime, endtime, description)
VALUES ('$startdate' , '$starttime' , '$endtime' , '$description')"; //Inmatning av information.
$conn->exec($sql); // Exekvering av SQL Query.
}
else {
echo "Detta är en dubbelbokning!";
}
【问题讨论】:
-
请将您的代码直接放在您的问题中,而不是图片中。另外,具体说明什么不起作用。你有错误吗?如果是这样,它们是什么?如果没有,正在发生什么。你期待发生什么?你已经做了哪些调试?
-
对不起,我以前从未在论坛上发过关于编码的帖子。但我想要它做的是 - 将查询发送到我的数据库并查看指定的列以查看是否有任何重复项。如果有重复项,我希望它跳转到我的 else 语句并显示错误消息。截至目前,我的 if/else 语句中的条件似乎总是返回 true,因此它允许重复。
-
不要试图仅仅通过查询值是否已经存在来防止重复——当您添加并发用户时,该方法会很快失效。改为在您的数据库上使用 UNIQUE 约束。
-
@AlexHowansky 我可以将唯一约束放在我的所有列上还是单列?
-
您可以有多个唯一约束,如果需要,您可以在一个约束中使用多个列。
标签: php mysql sql database duplicates