Javascript 如何检查数据库中的项目,如果是新的,如何添加?
我有一个页面,用户希望在其中向数据库添加新类别, 我想检查该类别之前是否已添加到数据库中,如果是新类别,请将其添加到数据库中,该类别工作正常,但添加了多次(与表中的数据相同)。我知道这是因为Javascript 如何检查数据库中的项目,如果是新的,如何添加?,javascript,php,sql,ajax,pdo,Javascript,Php,Sql,Ajax,Pdo,我有一个页面,用户希望在其中向数据库添加新类别, 我想检查该类别之前是否已添加到数据库中,如果是新类别,请将其添加到数据库中,该类别工作正常,但添加了多次(与表中的数据相同)。我知道这是因为foreach,如何执行?以及如何提醒用户该类别已存在 Php代码: <?php include_once "connect.php"; $stmt ="SELECT distinct Category_Name FROM Categories"; foreach ($c
foreach
,如何执行?以及如何提醒用户该类别已存在
Php代码:
<?php
include_once "connect.php";
$stmt ="SELECT distinct Category_Name FROM Categories";
foreach ($conn->query($stmt) as $row)
{
if ($row['Category_Name'] != $_POST["CatName"])
{
$sql ="INSERT INTO Categories (Category_Name) VALUES (:CatName)";
$result=$conn->prepare($sql);
$result->bindparam(':CatName', $_POST["CatName"], PDO::PARAM_INT);
$result->execute();
}
else
{
return false;
}
}
?>
Edit1
我将其更改为以下内容,效果很好,但如何提醒用户之前已插入此类别
$stmt ="SELECT * FROM Categories WHERE Category_Name='".$_POST["CatName"]."'";
$queryresult = $conn->query($stmt)->fetchAll(PDO::FETCH_ASSOC);
if (count($queryresult) == 0)
{
$sql ="INSERT INTO Categories (Category_Name) VALUES (:CatName)";
$result=$conn->prepare($sql);
$result->bindparam(':CatName', $_POST["CatName"], PDO::PARAM_INT);
$result->execute();
}
试试这个:
<?php
include_once "connect.php";
$stmt ="SELECT distinct Category_Name FROM Categories";
$exists = false;
foreach ($conn->query($stmt) as $row) {
if ($row['Category_Name'] == $_POST["CatName"]) {
$exists = true;
}
}
if(!$exists) { // The category doesn't exist.
$sql ="INSERT INTO Categories (Category_Name) VALUES (:CatName)";
$result=$conn->prepare($sql);
$result->bindparam(':CatName', $_POST["CatName"], PDO::PARAM_INT);
$result->execute();
}
return $exists;
?>
我不知道
PHP
那么好,这段代码中可能有一些语法错误。您可以将数据库中的Category\u Name设置为索引唯一,这样数据库就不会插入重复的mane。在您的惰性SQl中,添加重复密钥逻辑不正确。您正在查找所有现有类别,然后为与给定类别不匹配的每一个类别插入一行。您需要向SQL中添加where子句,以仅选择与您的类别匹配的行,然后当类别存在时,它将返回一行,当类别不存在时,它将不返回任何行。剩下的代码应该只在行数为零时插入。请为您使用的特定数据库添加一个标记,if MySQL:insert语句之前检查是否存在同名记录如果是,则相应地做出响应不需要两个ajax调用这会起作用,但有更好的方法不需要读取整个表。如果另一个用户在选择和插入之间添加了一个类别,会发生什么情况。@AlexK。我只是想让OP的方法奏效。在回答你提到的问题时,让这个专栏变得独一无二是一个更好的方法。即使在数据库中搜索类别也会更好。为什么不只搜索用户正在插入的类别,然后如果找到则不插入其他插入,这样您就不必读取整个表
<?php
include_once "connect.php";
$stmt ="SELECT distinct Category_Name FROM Categories";
$exists = false;
foreach ($conn->query($stmt) as $row) {
if ($row['Category_Name'] == $_POST["CatName"]) {
$exists = true;
}
}
if(!$exists) { // The category doesn't exist.
$sql ="INSERT INTO Categories (Category_Name) VALUES (:CatName)";
$result=$conn->prepare($sql);
$result->bindparam(':CatName', $_POST["CatName"], PDO::PARAM_INT);
$result->execute();
}
return $exists;
?>
$result=$conn->prepare("SELECT COUNT(Category_Name) as total FROM Categories WHERE Category_Name = (:CatName)");
$result->bindparam(':CatName', $_POST["CatName"], PDO::PARAM_STR);
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
$exists = $row["total"] > 0;
}