bot*_*fix -4 php mysql sql mysqli
我要添加一个新区域,我想检查用户插入的名称是否已经存在于Areas表中。
我尝试使用select检查数据,但是当我将包含插入内容的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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我期望输出为,如果区域名称存在,则打印输出“区域名称已存在”(如果未使用插入行)
您可以稍微简化一下代码-最后一个选择语句是多余的,因为在查询之前您已经有了信息。您还应该使用准备好的语句,而不要使用real_escape_string()。
<?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();
}
Run Code Online (Sandbox Code Playgroud)
请注意,这可能会导致竞争条件-您应该将名称作为唯一约束,然后尝试插入它而不首先进行任何选择查询。然后根据您返回的错误代码检查是否存在。
| 归档时间: |
|
| 查看次数: |
189 次 |
| 最近记录: |