(PDO PHP) Самый быстрый способ обновить или вставить несколько строк?

php pdo

3510 просмотра

1 ответ

Я не знаю, как обновить или вставить несколько строк с помощью 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.

Я не знаю, как это работает или нет. И если у вас есть другой способ, пожалуйста, дайте мне знать. Огромное спасибо.

И если я использую оператор подготовить, я просто обновляю каждую строку каждый раз. ( Это намного безопаснее, чем выше )

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

Самая ненавистная вещь, которую я не хочу делать, это использовать цикл, который просматривает все элементы массива и каждый раз обновляет или вставляет каждый элемент.

Есть ли другой способ массового безопасного обновления или вставки нескольких строк в базу данных? Спасибо за помощь.

Извините за мой английский.

Автор: user3883314 Источник Размещён: 13.11.2019 11:34

Ответы (1)


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
}

При таком подходе вы, по крайней мере, эффективно используете подготовленный оператор для минимизации накладных расходов.

Автор: Mike Brant Размещён: 16.11.2014 05:50
Вопросы из категории :
32x32