Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用PDO将多个插入到3个表中_Php_Mysql_Sql_For Loop_Pdo - Fatal编程技术网

Php 使用PDO将多个插入到3个表中

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(); 但这是正确、有效的方法吗?您描述的方法将起作用,它将执行三个命令,但由于它们非常小,因此不会对数据库造成太大影响 另一种方法是格式化如下所示的查询:

如何使用PDO执行3个不同的表插入,SQL查询是通过for循环生成的,例如

我的脚本非常庞大,因此要将其缩小到代码的主要因素

然后我希望它执行处理它的SQL并将值插入表中,如下所示:

$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]));
}