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

时间:2015-01-22 14:31:52

标签: php mysql forms pdo insert

我刚开始学习PDO。我已连接到我的数据库,并且我在mySql数据库中进行了正常工作的登录。现在我试图从表单中获取三个数据,然后将它们插入表中。我已经在这一周了,我提出的每个版本都失败了。当我检查表时它仍然是空的,我没有收到任何错误消息。

由于我正在进行其他PDO操作,因此我确信问题出现在以下代码中。涉及的按钮名为'addGig'。这是我第一次使用按钮的名称......我对此并不自信。

我刚刚编辑了这篇文章,以包含我修改后的代码。 这么多菜鸟错误!

       $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>

3 个答案:

答案 0 :(得分:5)

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

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

您使用了错误的引号。 '将事物变成字符串文字。您不能在MySQL中使用字符串文字作为标识符。标识符(表/字段名称)必须是单词,或者用反引号引用。由于您的字段名称都不是保留字,因此不需要反引号。但是以下任何一种都是可以接受的

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

答案 1 :(得分:3)

您必须以正确的格式编辑准备好的声明:

  

不应使用'。

转义数据库中的列
"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

答案 2 :(得分:1)

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

其中之一是,您正在使用<form>,在未给出方法时默认为GET。这与您的$_POST变量一起使用。

因此你需要给它一个特定的方法,POST。

<form method="post">

另外,如果没有动作,则默认为self。

如果您从SQL中单独使用该表单,则需要指定它。

即:

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

另外,您正在使用列的引号。删除它们或使用刻度线。

根据您的原始问题,这些不是正确的标识符 https://stackoverflow.com/revisions/28091236/2

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