我刚开始学习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>
答案 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')