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

Php 使用PDO插入数据。我尝试了很多方法,但都失败了,php,mysql,forms,pdo,insert,Php,Mysql,Forms,Pdo,Insert,我刚刚开始学习PDO。我已经连接到我的数据库,并且我有一个mySql数据库的工作登录。现在,我试图从表单中获取三条数据,然后将它们插入表中。我已经做了一个星期了,每个版本都失败了。当我检查表时,没有收到任何错误消息,但表仍然为空 由于我有其他PDO操作在工作,我相信问题出在下面的代码中。所涉及的按钮名为“addGig”。这是我第一次使用按钮的名称。。。我对此没有信心 我刚刚编辑了这篇文章,加入了我修改过的代码。 这么多新手犯的错误 } 这是我的html表单 <form> &

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

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

我刚刚编辑了这篇文章,加入了我修改过的代码。 这么多新手犯的错误

}

这是我的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>

日期

地点

时间


添加gig
您必须将准备好的报表编辑为正确的格式:

数据库中的列不应使用“”转义

你可以这样写准备好的陈述(为了更好地阅读):

在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();
有关更多信息,请参阅手册:

您没有错误处理,只是假设您的准备工作永远不会失败。如果您有错误处理,您会被告知语法错误:

INSERT INTO gigs ('date', 'venue', 'time') 
                  ^----^--^-----^--^----^----
你使用了错误的引语<代码>“将内容转换为字符串文本。在MySQL中不能使用字符串文本作为标识符。标识符(表/字段名)必须是裸字,或用反勾号引用。由于没有字段名是保留字,因此不需要反勾号。但以下任何一项都是可以接受的

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

这里有几个问题。(现在在您发布表单代码后才知道)

其中之一是,您使用的是
,当没有给出方法时,默认为GET。这与您的
$\u POST
变量一起使用

因此你需要给它一个具体的方法,POST

<form method="post">

阅读此内容,您就会知道它失败的原因。另外,检查错误,这是你没有做的。我不理解错误检查。我的代码是否应该包含显示错误的内容?请参见下面Marc的回答。我建议您向我们展示您正在使用的HTML表单。另外,你的连接是PDO,对吗?这将消除一切猜测;-)在打开
后立即将错误报告添加到文件顶部,因此,告诉OP他们的代码有什么问题。两种方法都有效。“第二:查询中的参数必须包含“:”。状态
$stmt=$dbh->prepare(“插入注册表(名称、值)值(?,)”$stmt->bindParam(1,$name)$stmt->bindParam(2$value)同样,这两个都是有效的。好的,我已经格式化了我的代码以匹配goldlifes的示例。仍然不起作用。现在我正在检查这个错误处理情况。哦,是的,你是对的…:)。我甚至总是用我的方法:parameter,而忘记了这个?我也在工作。我会编辑这个。所以OP查询中的问题是“列名称”。。。必须将其插入GIG(列名称)中,而不带“.”。当然,假设OP的表单已签出;-)啊,学习曲线。谢谢马克。这种错误处理必须很重要。我会调查的。永远不要假设在涉及外部资源的行动中取得成功。他们成功的方式只有一种(他们“只是这么做”),而失败的方式几乎是无限的。这是一个基本的防御性编程:总是假设失败,检查失败,并将成功视为惊喜。哈。谢谢马克让我振作起来。我将代码放在了try/catch中,只有在PDO中启用了异常模式时才使用-catch(PDOException$e){handle_sql_errors($query,$e->getMessage());}。默认情况下,它只会在失败时返回一个布尔值FALSE?它包含在GUI页面中…@user3545757,这是一个示例。如果表单名为“form.html”,SQL文件名为“database.php”,则将操作命名为该操作。您的表单和SQL是否都在一个文件中?否。表单在GUI.php中,代码在GUI.php中包含的giupdate.php中。然后执行
操作@User3545757错误是否可能在我的数据库中?我的登录表工作正常。。
INSERT INTO gigs ('date', 'venue', 'time') 
                  ^----^--^-----^--^----^----
INSERT INTO gigs (`date`, `venue`, `time`) 
INSERT INTO gigs (date, venue, time) 
<form method="post">
<form method="post" action="handler.php">
('date', 'venue', 'time')