这是我的表
CREATE TABLE room (
room_ID VARCHAR(8),
room_name TEXT(50),
room_capacity INT(3),
room_building VARCHAR(20),
room_type VARCHAR(20),
room_desc TEXT(100),
PRIMARY KEY (room_ID)
);
这是我的插入代码。
<?php
//Start session
session_start();
//Import connection
include('conn.php');
$room_ID = $_POST["room_ID"];
$room_type = $_POST["room_type"];
$room_name = $_POST["room_name"];
$room_capacity = $_POST["room_capacity"];
$room_building = $_POST["room_building"];
$room_desc = $_POST["room_desc"];
//echo $room_ID;
//echo $room_type;
//echo $room_name;
//echo $room_capacity;
//echo $room_building;
//echo $room_desc;
//Check for duplicate room ID
//if($room_ID != '') {
$qry = "SELECT room_ID FROM room WHERE room_ID = '".$room_ID."'";
$result = mysql_query($qry);
if($result) {
if(mysql_num_rows($result) > 0) {
header("location: duplicateID.php");
exit();
}
@mysql_free_result($result);
}
else {
die("Yang ini lah failed");
}
}
//Create INSERT query
$qry = "INSERT INTO room (room_ID, room_name, room_capacity, room_building, room_type, room_desc)
VALUES('$room_ID', '$room_name', '$room_capacity', '$room_building', '$room_type', '$room_desc')";
$result = @mysql_query($qry);
//Check whether the query was successful or not
if($result) {
header("location: addroomsuccess.php");
exit();
} else {
die("Query failed");
}?>
但问题是,这个过程停留在第一个if else。但是当我删除那些if else时,查询仍然失败。为什么会这样?是因为我使用varchar作为主键的数据类型吗?
答案 0 :(得分:0)
这个错误。
1)如果你有PK,你将不会得到重复,所以你的检查毫无意义。
2)只需插入即可。如果失败,则会出现重复或其他问题。首先检查只会缩小机会,但在多用户环境中仍然可能出错。
3)SQL注入 - 读取它,在实现SQL时理解它,避免它(参数)。
但要回答你的问题,不是它与VARCHAR无关 - 如果它有意义,那就没关系。 @AlexandreLavoie的建议不好或相关(抱歉!)。