我想问一个关于CREATE TABLE,ALTER TABLE,UPDATE / SET / WHERE的问题,因为当涉及到PRIMARY KEY时,我对如何使用这些命令感到非常困惑,而且我从不同的人那里获得了不同的建议。最初,我建立了与数据库的连接并在名为“creation.php”的文件中创建了一个表:
$con=mysqli_connect("localhost","root","","Accommodation");
$sql="CREATE TABLE Hotels(Name CHAR(30),City CHAR(30))";
我的第二个文件名为“hoteldetails.php”,会生成一份调查问卷,询问酒店客人他们住的酒店名称以及他们所在的城市。来自“hoteldetails.php”的用户数据由“processhoteldetails.php”,此文件(未以完整形式提供)包含以下内容:
session_start();
$sessionID = $_SERVER['REMOTE_ADDR'] . " " .
date("Y-m-d H:i:s",time());
$_SESSION['sessionID']=$sessionID;
$sql = "ALTER TABLE Hotels
ADD COLUMN (
`Name` VARCHAR(30),
`City` VARCHAR(30));";
$sql="INSERT INTO Hotels (SessionID, Name, City)
VALUES ('$sessionID','$name', '$city')";
if (!mysqli_query($con,$sql)) {
die('Error: ' . mysqli_error($con));
在处理数据之后,用户连接到由名为“hotelrecommendation.php”的文件生成的另一个网页,该网页询问用户他是否会向其他人推荐该酒店并给出评级。 “hotelrecommendation.php”由“processhotelrecommendation.php”处理,看起来像这样(这里只给出了代码的一部分):
session_start();
$sessionID = $_SESSION['sessionID'];
if($sessionID == "") {
$sessionID = $_SERVER['REMOTE_ADDR'] . " " . date("Y-m-d H:i:s",time());
$_SESSION['sessionID']=$sessionID;
}
$sql = "ALTER TABLE Hotels
ADD COLUMN (
`Recommendation` VARCHAR(150),
`Rating` SMALLINT(5));";
mysqli_query($con,$sql);
$sql = "UPDATE Hotels
SET `Recommendation` = '$recommendation',
`Rating` = '$rating'
where sessionID = '$sessionID'";
当我回答“hoteldetails.php”中的问题并单击“提交”时,我收到一条错误消息“错误:字段列表中不存在列SessionID”。 (我甚至没有回答“hotelrecommendation.php中的问题,因为此错误阻止我到达该页面。”但除此之外,我想问下列内容:
1)我真的需要“processhoteldetails.php”中的ALTER TABLE命令还是多余的?
2)在“processhoteldetails.php”中,我有“ALTER TABLE Hotels ADD COLUMN”声明,其中添加了两列。但是,在下一行中,我有“INSERT INTO Hotels VALUES”语句,其中包含三列(额外列为主键SessionID)。这让我很困惑。我怎样才能让SQL机器改变一个表,使它有两列,然后将值插入同一个表中,并带有三个值?这似乎完全不一致。这是我收到错误的原因,说字段列表中不存在会话ID?我真的希望你们中的一些SQL专家可以对这个原因有所了解,无论我做什么,错误信息不断出现,阻止我进入下一阶段。
答案 0 :(得分:1)
您无法将name
和city
添加到Hotels
,因为他们已经从CREATE
语句中添加到该表中。你猜测它是多余的。
您的错误很有意义,因为您尝试填充表格中不存在的字段。您需要先添加SessionID
字段,然后才能填充CREATE
或ALTER
。
目前还不清楚为什么你以这种方式设置了这个设置,你可能只需CREATE
预先包含所有相关字段的表,并摆脱多个{{ 1}}添加字段的语句。