2010-04-28 6 views
4

가능한지 확실하지 않습니다. 그렇지 않다면 알려주세요.검색어를 조건부로 업데이트 하시겠습니까?

나는 3 개의 필드를 업데이트하는 PDO mysql을 가지고있다.

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

하지만 field3을 원하는 업데이트 할 경우에만 $update3 = true;

는 단일 쿼리로 달성이 가능 (field3의 업데이트는 조건문에 의해 제어되는 것을 의미)?

두 개의 쿼리를 사용하여 field1field2을 업데이트 한 다음 부울을 확인하고 필요한 경우 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

당신은 분명히 할 수 있습니까? 그렇다면, 당신이 제공하는 새로운 가치가 사실 일 때 또는 기존 가치 일 때를 의미합니까? – JAL

+0

'update3'은 부울 값이고'$ update3 = true;'는'field3 = : field3'을 정말로 업데이트하고 싶은지 결정하는 데 도움이되는 조건입니다. 질문을 더 명확하게 업데이트 할 것입니다. – dmontain

답변

5

여러 쿼리를 수행 할 필요가 없습니다. 그 조건부를 기반으로 쿼리 문자열을 구조화 한 다음 실행을 위해 DB adapater에 전달하면 어떨까요? 다음과 같이 표시 될 수 있습니다 :

$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

관련 문제