我不知道如何使用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();
我不想做的最讨厌的事情是使用循环遍历数组中的所有元素,每次更新或插入每个元素
另一种批量安全更新或向数据库插入多行的方法是什么?谢谢你的帮助。
抱歉我的英文。
答案 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
}
使用这种方法,您至少可以利用预准备语句来最小化查询开销。