(PDO PHP)更新或插入多行的最快方法?

时间:2014-11-16 17:19:10

标签: php pdo

我不知道如何使用PDO更新或插入多行。请帮帮我。

我想到的是:

$stmt = $dbh->query("update_line_1; update_line_2; update_line_3");
//update_line_1: update table a set a.column1 = "s1" where a.id = 1
//update_line_2: update table a set a.column1 = "s2" where a.id = 2
//....

$stm = $dbh->query("insert_line_1; insert_line_3; insert_line_3");
//something is like the update line above.

我不知道这种方式是否有效。如果您有其他方式,请告诉我。非常感谢你。

如果我使用prepare语句,我每次只更新每一行。 (这比上面安全得多

$stmt = $dbh->prepare("update table a set a.colum1 = :column1 where a.id = :id");
$stmt->bindParam(":column1","s1");
$stmt->bindparam(":id",1);
$stmt->execute();

我不想做的最讨厌的事情是使用循环遍历数组中的所有元素,每次更新或插入每个元素

另一种批量安全更新或向数据库插入多行的方法是什么?谢谢你的帮助。

抱歉我的英文。

1 个答案:

答案 0 :(得分:8)

对于插入,您可以使用以下语法插入多行数据:

INSERT INTO table (col1, col2, col3)
VALUES
    ('1', '2', '3'),
    ('a', 'b', 'c'),
    ('foo', 'bar', 'baz')

对于更新,默认情况下,更新将影响符合查询条件的行数。所以像这样会更新整个表

UPDATE table SET col = 'a'

如果您尝试更新每行的不同值,除了对每个操作执行查询之外,您没有其他选择。不过我建议你在PDO示例的基础上做一下这样的事情:

$update_array = array(
    1 => 'foo',
    2 => 'bar',
    10 => 'baz'
); // key is row id, value is value to be updated

$stmt = $dbh->prepare("UPDATE table SET column1 = :column1 where id = :id");
$stmt->bindParam(":column1",$column_value);
$stmt->bindparam(":id",$id);
foreach($update_array as $k => $v) {
    $id = $k
    $column_value = $v;
    $stmt->execute();
    // add error handling here
}

使用这种方法,您至少可以利用预准备语句来最小化查询开销。