Php 使用PDO将多个插入到3个表中
如何使用PDO执行3个不同的表插入,SQL查询是通过for循环生成的,例如 我的脚本非常庞大,因此要将其缩小到代码的主要因素 然后我希望它执行处理它的SQL并将值插入表中,如下所示:Php 使用PDO将多个插入到3个表中,php,mysql,sql,for-loop,pdo,Php,Mysql,Sql,For Loop,Pdo,如何使用PDO执行3个不同的表插入,SQL查询是通过for循环生成的,例如 我的脚本非常庞大,因此要将其缩小到代码的主要因素 然后我希望它执行处理它的SQL并将值插入表中,如下所示: $dbh->beginTransaction(); $sth = $dbh->exec($main_sql); $dbh->commit(); 但这是正确、有效的方法吗?您描述的方法将起作用,它将执行三个命令,但由于它们非常小,因此不会对数据库造成太大影响 另一种方法是格式化如下所示的查询:
$dbh->beginTransaction();
$sth = $dbh->exec($main_sql);
$dbh->commit();
但这是正确、有效的方法吗?您描述的方法将起作用,它将执行三个命令,但由于它们非常小,因此不会对数据库造成太大影响 另一种方法是格式化如下所示的查询:
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更常用的方法是使用准备好的语句。准备好后,只需更改值即可多次执行
$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]));
}
$sql=“插入日期(日期1,日期2)值(:1,:2)”;
$sth=$dbh->prepare($sql,数组(PDO::ATTR_CURSOR=>PDO::CURSOR_FWDONLY));
对于($i=0;$iexecute(数组(':one'=>$\u POST['date\u range'][$i],':two'=>'$\u POST['date\u range\u end'][$i]);
}
使用:1
、:2
等链接时安全吗?这些值必须先转义吗?@lolwut:它们将由PDO自动转义,因此不需要进行额外的转义$sth->execute()
在出现错误时将返回false,因此您当然需要对此进行检查。
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]
$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]));
}