Php 使用MySQL和PDO插入阵列
我阅读了很多教程来了解如何在一个查询中插入多行,因为我必须在PHP表单(v5.4)中处理多项选择问题 不幸的是,我的查询中仍然有错误 你能帮帮我吗 为了更准确地说明目的,我制作了一个表单,并用MySQL创建了一个数据库:Php 使用MySQL和PDO插入阵列,php,arrays,pdo,insert-into,Php,Arrays,Pdo,Insert Into,我阅读了很多教程来了解如何在一个查询中插入多行,因为我必须在PHP表单(v5.4)中处理多项选择问题 不幸的是,我的查询中仍然有错误 你能帮帮我吗 为了更准确地说明目的,我制作了一个表单,并用MySQL创建了一个数据库: 一个表(A),用于存储单选按钮和带有序列id的文本问题的所有单个值 每个多项选择题的表格,其中我在一列中列出了所有可能的答案,在另一列中列出了ID代码 每个多选题都有一个“中间”表,用于存储与在表A中插入时自动创建的id相同的id,以及复选框问题中所选值的id(因此,对于填写
- 一个表(A),用于存储单选按钮和带有序列id的文本问题的所有单个值
- 每个多项选择题的表格,其中我在一列中列出了所有可能的答案,在另一列中列出了ID代码
- 每个多选题都有一个“中间”表,用于存储与在表A中插入时自动创建的id相同的id,以及复选框问题中所选值的id
(因此,对于填写的一个表单,我希望在表A中得到一行,以及与每个对应问题中所选值相同的行“中间”表
<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>
电话
邮件
其他
非常感谢您的帮助!我终于解决了我的问题。对于那些对解决方案感兴趣的人,这里有一个(带有“获取最后一个id奖金”):
在不回答您的问题时,请使用预先准备好的语句!仅使用PDO不会使您的脚本对SQL注入安全。请使用[number of array elements]问号构建并准备您的查询,然后使用
$stmt->execute($array)插入
而不是将其内爆。检查如何执行此操作。您阅读了哪一个特定教程?呼出$values
当我将“values($values)”更改为“values”($values')时,您应该会看到您的问题$values在我的表格和我的数据库表中显示(数组)。我阅读了答案和其他(随机)教程,我必须承认我对所有PDO函数都有点迷茫。你介意为我的特定示例编写语法吗?我是否应该包括任何循环,以便它对每个勾选的答案重复插入?对不起,我是新手。。。
<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>
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