使用 PDO 插入数据。我尝试了很多方法都失败了

Inserting data with PDO. I have tried so many ways and failed

刚开始学习PDO。我已连接到我的数据库,并且可以使用 mySql 数据库登录。现在我试图从一个表单中获取三段数据,然后将它们插入到 table 中。我已经研究了一个星期,但我想出的每个版本都失败了。当我检查 table 它仍然是空的时,我还没有收到任何错误消息。

由于我有其他 PDO 操作在工作,我确信问题出在以下代码段中。涉及的按钮名为'addGig'。这是我第一次使用按钮的名称......我对此没有信心。

我刚刚编辑了此 post 以包含我修改后的代码。 这么多菜鸟错误!

       $date  = $_POST['date'];
       $venue = $_POST['venue'];
       $time  = $_POST['time'];

   if (!empty($date) && !empty($venue) && !empty($time)){

    try{
        $query = $connect->prepare("INSERT INTO gigs (date, venue, time) VALUES (:date, :venue, :time)");
        $query->bindParam(':date' , $date);
        $query->bindParam(':venue' , $venue);
        $query->bindParam(':time' , $time);
        $query->execute(); 

       }

     catch(PDOException $e)
       {
       handle_sql_errors($query, $e->getMessage());
       }
  }

}

这是我的 html 表格

  <form>
  <label>date</label><br><input type="text" name="date"><br>
  <label>venue</label><br><input type="text" name="venue"><br>
  <label>time</label><br><input type="text" name="time"><br>
  <br>
  <button type="submit" value="addGig" name="addGig">add gig</button>
  </form>

您必须将准备好的语句编辑为正确的格式:

the columns in your database shouldn't be escaped with '.

"INSERT INTO gigs (date, venue, time) ...

你可以这样写准备好的语句(为了更好的阅读):

...VALUES (:date, :venue, :time)...

在您的 bindParam 方法中,您可以像这样分配变量:

$query->bindParam(':date' , $date);

或者您在查询中这样做:

...VALUES (?, ?, ?)...

然后:

$query->bindParam(1 , $date);

试试这个:

    $query = $connect->prepare("INSERT INTO gigs (date, venue, time) VALUES (:date, :venue, :time)");
    $query->bindParam(':date' , $date);
    $query->bindParam(':venue' , $venue);
    $query->bindParam(':time' , $time);
    $query->execute();

有关更多信息,请参阅手册: http://php.net/pdo.prepared-statements

您的错误处理为零,并且只是假设您的准备永远不会失败。如果你有错误处理,你会被告知你的语法错误:

INSERT INTO gigs ('date', 'venue', 'time') 
                  ^----^--^-----^--^----^----

您使用了错误的引号。 ' 把东西变成字符串文字。您不能在 MySQL 中使用字符串文字作为标识符。标识符(table/field 个名称)必须是裸词,或者用反引号引起来。由于 none 的字段名称是保留字,因此不需要反引号。但以下任何一项都可以接受

INSERT INTO gigs (`date`, `venue`, `time`) 
INSERT INTO gigs (date, venue, time) 

这里有一些问题。 (现在在您发布表单代码后就知道了)。

其中之一是,您使用的是 <form>,在未提供方法时默认为 GET。这与您的 $_POST 变量相结合。

所以你需要给它一个具体的方法,POST。

<form method="post">

此外,没有任何操作,默认为自己。

如果您使用与 SQL 分开的表单,则需要指定它。

即:

<form method="post" action="handler.php">

另外,您 are/were 为您的专栏使用引号。删除它们或使用刻度。

根据您最初的问题,这些标识符不正确
https://whosebug.com/revisions/28091236/2

('date', 'venue', 'time')