2010-04-28 1 views
4

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

У меня есть 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 запросе?

+0

Можете ли вы уточнить, вы имеете в виду поле3, а не update3? Если это так, вы имеете в виду, когда новое значение, которое вы поставляете, истинно или существующее значение? – JAL

+0

'update3' является логическим, а' $ update3 = true; 'является условием, которое поможет мне решить, действительно ли я хочу обновить' field3 =: field3' или нет. Я уточню вопрос, чтобы сделать его более понятным. – dmontain

ответ

5

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

$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(); 
+1

Спасибо, фалом. Так оно и было. – dmontain

Смежные вопросы