如何解决用PDO将多个INSERT插入3个表中
| 如何使用通过for循环生成SQL查询的PDO执行3种不同的表INSERT,例如 我的脚本非常庞大,因此将其范围缩小到代码的主要因素。$date_sql = \'\';
for($i = 0; $i < count($_POST[\'date_range\']); $i++)
{
// codez
$date_sql .= \" INSERT INTO dates (date_one,date_two) VALUES(\'\" . $_POST[\'date_range\'][$i] . \"\',\'\" . $_POST[\'date_range_end\'][$i] . \"\'); \";
// more codez
}
我有3个for循环,与我给出的这个循环相同,但是有不同的$_POST
值和不同的表:months
,years
。它将根据“ 4”变量生成多行SQL查询。
完成3个循环后,我将3个sql变量加入一个字符串中:
$main_sql = $date_sql . $month_sql . $year_sql;
然后,我希望它执行处理它的SQL并将值插入表中,如下所示:
$dbh->beginTransaction();
$sth = $dbh->exec($main_sql);
$dbh->commit();
但这是正确,有效的方法吗?
解决方法
执行此操作的更多PDO方法是使用准备好的语句。准备好之后,只需更改值即可执行多次。
$sql = \"INSERT INTO dates (date_one,date_two) VALUES(:one,:two)\";
$sth = $dbh->prepare($sql,array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
for($i = 0; $i < count($_POST[\'date_range\']); $i++) {
$sth->execute(array(\':one\' => $_POST[\'date_range\'][$i],\':two\' => \'$_POST[\'date_range_end\'][$i]));
}
,描述的方式将起作用,它将执行三个命令,但是由于它们非常小,因此不会对数据库造成太大的影响。
另一种方法是格式化查询,如下所示:
INSERT INTO dates (date_one,date_two)
SELECT $_POST[\'date_range\'][0],$_POST[\'date_range_end\'][0]
UNION SELECT $_POST[\'date_range\'][1],$_POST[\'date_range_end\'][1]
UNION SELECT $_POST[\'date_range\'][2],$_POST[\'date_range_end\'][2]
,不,这不是正确,首选和有效的方法。您想看一下PDO的准备好的语句:pdo-> prepare(),pdoStatement-> bindParam(),pdostatement-> execute()和pdostatement-> fetch()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。