使用PDO在Mysql中更新多个值的最有效方法

时间:2012-09-04 01:12:13

标签: php mysql pdo

鉴于此类用户表结构,您在表中存储了许多用户值(例如电话号码,首选项,联系信息):

Table: User ID | Key | Value

$values = [
    1 => 'A value for key 1',
    2 => 'Hello',
    8 => 'Meow',
]

// Update values
$stmt = $pdo_db->prepare('
    INSERT INTO table (UID, KEY, VALUE)
    VALUES            (:UID, :KEY, :VALUE)
    ON DUPLICATE KEY UPDATE VALUE = :VALUE');

foreach ($values as $key => $value) {
    $stmt->bindParam(':KEY', $key);
    $stmt->bindParam(':VALUE', $value);
    $stmt->execute();
}

如果您有150对不同的对,那么每次更新就有150个查询。我该如何优化此代码?制作一个巨大的SQL会让mysql方面的工作变得更容易吗?我应该考虑改变结构本身吗?

1 个答案:

答案 0 :(得分:2)

以此查询为指导 -

INSERT INTO example
  (example_id, name, value, other_value)
VALUES
  (100, 'Name 1', 'Value 1', 'Other 1'),
  (101, 'Name 2', 'Value 2', 'Other 2'),
  (102, 'Name 3', 'Value 3', 'Other 3'),
  (103, 'Name 4', 'Value 4', 'Other 4');

允许您一次插入多个记录。

如果您知道哪些记录是新的,可以加快将它们分成普通INSERT - mysql必须花费额外的时间来协调ON DUPLICATE... UPDATE

如果您只是更新,请考虑使用UPDATEREPLACE