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

时间:2015-01-19 01:14:18

标签: php mysql sql sql-server

我想问一个关于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专家可以对这个原因有所了解,无论我做什么,错误信息不断出现,阻止我进入下一阶段。

1 个答案:

答案 0 :(得分:1)

  1. 您无法将namecity添加到Hotels,因为他们已经从CREATE语句中添加到该表中。你猜测它是多余的。

  2. 您的错误很有意义,因为您尝试填充表格中不存在的字段。您需要先添加SessionID字段,然后才能填充CREATEALTER

  3. 目前还不清楚为什么你以这种方式设置了这个设置,你可能只需CREATE预先包含所有相关字段的表,并摆脱多个{{ 1}}添加字段的语句。