Php ALTER TABLE和INSERT INTO/VALUES之间的列号不一致

Php ALTER TABLE和INSERT INTO/VALUES之间的列号不一致,php,mysql,sql,sql-server,Php,Mysql,Sql,Sql Server,我想问一个关于createtable、altertable、UPDATE/SET/WHERE的问题,因为当涉及主键时,我完全不知道如何使用这些命令,而且我从不同的人那里得到了不同的建议。最初,我建立了与数据库的连接,并在一个名为“creation.php”的文件中创建了一个表: $con=mysqli_connect("localhost","root","","Accommodation"); $sql="CREATE TABLE Hotels(Name CHAR(3

我想问一个关于createtable、altertable、UPDATE/SET/WHERE的问题,因为当涉及主键时,我完全不知道如何使用这些命令,而且我从不同的人那里得到了不同的建议。最初,我建立了与数据库的连接,并在一个名为“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));
数据处理后,用户连接到另一个网页,该网页由一个名为“hotelRecommension.php”的文件生成,该网页询问用户是否会向其他人推荐酒店,并给出评级。“HotelRecommension.php”由“ProcessHotelRecommension.php”处理,如下所示(仅部分代码):

当我回答“hoteldetails.php”中的问题并单击SUBMIT时,我会收到一条错误消息:“错误:字段列表中不存在列SessionID”。(我甚至无法回答“hotelRecommension.php”中的问题,因为这个错误阻止我访问该页面)。但除此之外,我想问以下问题:

1) 我真的需要“processhoteldetails.php”中的ALTER TABLE命令吗?还是这是多余的

2) 在“processhoteldetails.php”中,我有一个“ALTERTABLE HOTES ADD COLUMN”语句,它添加了两列。但是,在下一行中,我有一个“INSERT INTO HOTES VALUES”语句,它有三列(额外的一列是主键SessionID)。这让我很困惑。我如何让SQL机器更改一个表,使其具有两列,然后将值插入到具有三个值的同一个表中?这似乎完全不一致。这就是为什么我收到一个错误,说字段列表中不存在会话ID的原因吗?我真的希望你们中的一些SQL专家能够对t他的原因无论我做什么,错误信息总是不断出现,阻止我进入下一阶段

  • 您不能将
    name
    city
    添加到
    Hotels
    中,因为它们已经在您的
    CREATE
    语句中的表中。这是多余的

  • 您的错误是有意义的,因为您试图填充一个表中不存在的字段。您需要添加
    SessionID
    字段,然后才能在
    CREATE
    ALTER
    中进行填充


  • 现在还不清楚为什么要以这种方式进行设置,您可能应该先创建一个包含所有相关字段的表,然后去掉多个添加字段的
    ALTER
    语句。

    Goat,感谢您为我做了这么多的清理。我现在比半小时前了解得更多。为什么要标记这个?你读过标签的定义了吗?
              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'";