使用 MySQL 和 PDO 插入数组
INSERT INTO array with MySQL and PDO
我阅读了很多教程以了解如何在一个查询中插入多行,因为我必须以 PHP 形式处理多项选择题 (v5.4)。
不幸的是,我的查询仍然有错误。
你能帮帮我吗?
为了更准确地说明目的,我制作了一个表格,并在 MySQL 中创建了一个数据库:
一个 table (A) 存储单选按钮和带有序列号的文本问题的所有单个值。
每个多项选择题都有一个table,其中我在一栏中列出了所有可能的答案,在另一栏中列出了ID代码。
和每个多项选择题的"intermediate" table,以存储与在 table A 中插入时自动创建的 ID 相同的 ID 和 ID从复选框问题
中选择的值(因此,对于一个填写的表格,我希望在 table A 中得到一行,并且在每个相应的 "intermediate" table.
我的PHP代码(只引用一道选择题作为测试):
try {
$pdo = new PDO('mysql:host=myserver_url;dbname=my_db', 'my_user','my_pass');
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
}
catch(PDOException $e) {
echo 'Fail to connect';
exit();
}
try {
if(isset($_POST['add'])){
if(isset($_POST['checkbox_name'])) {
$values = '('.implode('),(', $_POST['checkbox_name']).')';
$sql =$pdo->exec("INSERT INTO my_db.my_table (field1)
VALUES ($values) ");
}
}
}
catch(PDOException $e) {
$msg = 'ERROR PDO in ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
die($msg);
}
HTML代码:
<body>
<form name="form_1" method="post" action="form_1.php">
<input type="checkbox" name="checkbox_name[]" value="1"><label >Telephone</label><br/>
<input type="checkbox" name="checkbox_name[]" value="2"><label >Mail</label><br/>
<input type="checkbox" name="checkbox_name[]" value="3"><label >Other</label><br/>
<br/>
<br/>
<input type="submit" name="add" value="SEND"/>
</form>
非常感谢您的帮助!
我终于解决了我的问题。对于那些对解决方案感兴趣的人,这里是(带有 "get the last id bonus"):
try {
if(isset($_POST['add'])){
if(isset($_POST['nature_contact'])) {
$sql = "INSERT INTO db.int_contact (id_g,id_nature_contact) VALUES " .rtrim(str_repeat('('.$lastID.', ?),', count($_POST["nature_contact"])), ',');
$statement = $pdo->prepare($sql);
$count = 1;
foreach($_POST["nature_contact"] as $nature_contact) {
$statement->bindValue($count++, $nature_contact);
}
$statement->execute();
}
}
}
// and then add a catch exceptions
我阅读了很多教程以了解如何在一个查询中插入多行,因为我必须以 PHP 形式处理多项选择题 (v5.4)。
不幸的是,我的查询仍然有错误。
你能帮帮我吗?
为了更准确地说明目的,我制作了一个表格,并在 MySQL 中创建了一个数据库:
一个 table (A) 存储单选按钮和带有序列号的文本问题的所有单个值。
每个多项选择题都有一个table,其中我在一栏中列出了所有可能的答案,在另一栏中列出了ID代码。
和每个多项选择题的"intermediate" table,以存储与在 table A 中插入时自动创建的 ID 相同的 ID 和 ID从复选框问题
中选择的值(因此,对于一个填写的表格,我希望在 table A 中得到一行,并且在每个相应的 "intermediate" table.
我的PHP代码(只引用一道选择题作为测试):
try {
$pdo = new PDO('mysql:host=myserver_url;dbname=my_db', 'my_user','my_pass');
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
}
catch(PDOException $e) {
echo 'Fail to connect';
exit();
}
try {
if(isset($_POST['add'])){
if(isset($_POST['checkbox_name'])) {
$values = '('.implode('),(', $_POST['checkbox_name']).')';
$sql =$pdo->exec("INSERT INTO my_db.my_table (field1)
VALUES ($values) ");
}
}
}
catch(PDOException $e) {
$msg = 'ERROR PDO in ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
die($msg);
}
HTML代码:
<body>
<form name="form_1" method="post" action="form_1.php">
<input type="checkbox" name="checkbox_name[]" value="1"><label >Telephone</label><br/>
<input type="checkbox" name="checkbox_name[]" value="2"><label >Mail</label><br/>
<input type="checkbox" name="checkbox_name[]" value="3"><label >Other</label><br/>
<br/>
<br/>
<input type="submit" name="add" value="SEND"/>
</form>
非常感谢您的帮助!
我终于解决了我的问题。对于那些对解决方案感兴趣的人,这里是(带有 "get the last id bonus"):
try {
if(isset($_POST['add'])){
if(isset($_POST['nature_contact'])) {
$sql = "INSERT INTO db.int_contact (id_g,id_nature_contact) VALUES " .rtrim(str_repeat('('.$lastID.', ?),', count($_POST["nature_contact"])), ',');
$statement = $pdo->prepare($sql);
$count = 1;
foreach($_POST["nature_contact"] as $nature_contact) {
$statement->bindValue($count++, $nature_contact);
}
$statement->execute();
}
}
}
// and then add a catch exceptions