使用 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')
刚开始学习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')