更改表和插入/值之间的列号不一致


Inconsistency in column numbers between ALTER TABLE and INSERT INTO/VALUES

我想问一个关于创建表、更改表、更新/设置/位置的问题,因为我对在涉及主键时如何使用这些命令感到非常困惑,并且我从不同的人那里得到了不同的建议。最初,我建立与数据库的连接并在名为"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'";

当我回答"酒店详细信息.php"中的问题并单击"提交"时,我收到一条错误消息,指出"错误:字段列表中不存在列会话 ID"。(我什至无法回答"酒店推荐.php中的问题,因为此错误阻止我访问该页面)。但除此之外,我还想问以下几点:

1)我真的需要"进程酒店详细信息.php中的ALTER TABLE命令还是多余的?

2)在"流程酒店详细信息.php"中,我有"更改表酒店添加列"语句,该语句添加了两列。但是,在下一行中,我有"插入酒店价值"语句,该语句有三列(额外的列是主键 SessionID)。这让我感到困惑。如何要求 SQL 机器更改表以使其具有两列,然后将值插入到具有三个值的同一表中?这似乎完全不一致。这就是我收到错误消息说字段列表中不存在会话 ID 的原因吗?我真的希望你们中的一些SQL专家能够阐明这个原因,无论我做什么,错误消息不断出现,阻止我进入下一阶段。

  1. 您无法将namecity添加到Hotels,因为它们已在CREATE语句的表中。 正如你推测的那样,这是多余的。

  2. 您的错误是有道理的,因为您尝试填充表中不存在的字段。您需要先添加SessionID字段,然后才能填充它,无论是在 CREATE 中还是在ALTER中。

目前还不清楚为什么你以这种方式进行这种设置,你可能应该CREATE包含所有相关字段的表,并摆脱添加字段的多个ALTER语句。