Обновить запрос условным? - PullRequest
4 голосов
/ 28 апреля 2010

Я не уверен, если это возможно. Если нет, дайте мне знать.

У меня есть PDO mysql, который обновляет 3 поля.

$update = $mypdo->prepare("UPDATE tablename SET field1=:field1, 
                                                field2=:field2, 
                                                field3=:field3 
                                            WHERE key=:key");

Но я хочу, чтобы field3 обновлялся только тогда, когда $update3 = true; (это означает, что обновление field3 контролируется условным оператором)

Возможно ли это сделать одним запросом?

Я мог бы сделать это с 2 запросами, где я обновляю field1 и field2, затем проверяю логическое значение и обновляю field3 при необходимости в отдельном запросе.

//run this query to update only fields 1 and 2
$update_part1 = $mypdo->prepare("UPDATE tablename SET field1=:field1, 
                                                      field2=:field2
                                                  WHERE key=:key");

//if field3 should be update, run a separate query to update it separately
if ($update3){
  $update_part2 = $mypdo->prepare("UPDATE tablename SET field3=:field3 
                                                    WHERE key=:key");
}

Но, надеюсь, есть способ сделать это за 1 запрос?

1 Ответ

5 голосов
/ 29 апреля 2010

Вам не нужно делать несколько запросов.Почему бы вам просто не структурировать строку запроса на основе этого условия, а затем просто передать ее адаптеру БД для выполнения?Это может быть следующим:

    $pdo = new PDO($dsn, $user, $password);

    $sql = "UPDATE table SET columnname1=:field1, columname2=:field2";

    if ( $update ) $sql .= ",columname3=:field3";

    $sql .= " WHERE key=:key";

    $stmt = $pdo->prepare($sql);
    $stmt->bindParam(":key", $key, PDO::PARAM_INT);
    $stmt->bindParam(":field1", $field1, PDO::PARAM_STR);
    $stmt->bindParam(":field2", $field2, PDO::PARAM_STR);

    if($update) $stmt->bindParam(":field3", $field3, PDO::PARAM_STR);

    $stmt->execute();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...