Php 在插入MySQL之前,如何检查表中是否存在名称

Php 在插入MySQL之前,如何检查表中是否存在名称,php,mysql,sql,mysqli,Php,Mysql,Sql,Mysqli,我正在添加一个新区域,我想检查用户插入的名称是否已经存在于区域表中。 我曾尝试使用select检查数据,但当我将包含insert的if语句嵌套在while循环中时,没有发生任何错误,也没有输出 $campus_area_name = mysqli_real_escape_string($conn, $_POST["campus_area_fk"]); $area_name = mysqli_real_escape_string($conn, $_POST["area_name"]); $qu

我正在添加一个新区域,我想检查用户插入的名称是否已经存在于区域表中。

我曾尝试使用select检查数据,但当我将包含insert的if语句嵌套在while循环中时,没有发生任何错误,也没有输出

$campus_area_name = mysqli_real_escape_string($conn, $_POST["campus_area_fk"]);
$area_name = mysqli_real_escape_string($conn, $_POST["area_name"]);

$query_names = "SELECT name FROM areas WHERE idCampus = '".$campus_area_name."'";
$name_result = mysqli_query($conn, $query_names);
while ($row = mysqli_fetch_array($name_result)) {
    if($row["name"] == $area_name){
        echo "Area Name Already Exists";
    } else {
        $query = "INSERT INTO areas(name, idCampus) VALUES ('".$area_name."', '".$campus_area_name."')";
        if (mysqli_query($conn, $query)){
            $last_id = $conn->insert_id;
            $query_retrieve = "SELECT idareas, name FROM areas WHERE idareas = '".$last_id."'";
            $my_result = mysqli_query($conn, $query_retrieve);

            while ($rows = mysqli_fetch_array($my_result)) {
               $output["area_name_retrieve"] = $rows["name"];
               $output["area_id_retrieve"] = $rows["idareas"];
            }
             echo json_encode($output);
        } else {
            echo "failed" .  mysqli_error($conn);
        }
    }
}

我希望输出是,如果区域名称存在,则打印“区域名称已存在”如果未使用插入行,则可以稍微简化代码-最后一个select语句是多余的,因为您在查询之前已经有了信息。您还应该使用准备好的语句,而不是使用
real\u escape\u string()


谢谢你的回答,这将对我有所帮助,尤其是准备好的陈述。但是我不明白为什么你说第二个选择是多余的,因为它们有不同的条件。最后一个选择只是根据最后一个插入查看区域。但是第一个条件是基于e campus Table的外键您最后一次选择获取了您刚刚插入的行-但是您已经有了数据,因为您刚刚插入了它-您所需要的只是新生成的ID,您可以从
$stmt->insert_ID
属性中获得它。谢谢,伙计,您是最棒的,我希望我能给一个帖子打分,但是我的声誉仍然很低,很多Qirel,我刚刚实现了它,它工作得很完美为什么不只是一个sql语句呢?
<?php 

$stmt = $conn->prepare("SELECT name FROM areas WHERE idCampus = ?");
$stmt->bind_param("s", $_POST["campus_area_fk"]);
$stmt->execute();
$exists = $stmt->fetch();
$stmt->close();

if ($exists)
    echo "Area name already exists";
} else {
    $stmt = $conn->prepare("INSERT INTO areas (name, idCampus) VALUES (?, ?)");
    $stmt->bind_param("ss", $_POST["area_name"], $_POST["campus_area_fk"]);
    $stmt->execute();

    echo json_encode(['area_name_retrieve' => $_POST["area_name"], 'area_id_retrieve' => $stmt->insert_id]);
    $stmt->close();
}