Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检查数据库中的项目,如果是新的,如何添加?_Javascript_Php_Sql_Ajax_Pdo - Fatal编程技术网

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;
}