Koşullu ile sorguyu güncelleştirmek?

1 Cevap php

Ben bu mümkünse emin değilim. Değilse, bana bildirin.

Ben 3 alanlarını günceller bir PDO mysql var.

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

Ama ben field3 $update3 = true; (bir güncelleme field3, bir koşullu deyim tarafından kontrol edilir yani) sadece güncellenen olmak istiyorum

Bu tek bir sorgu ile gerçekleştirmek mümkün mü?

Ben field1 ve field2 sonra boolean ve güncelleme kontrol güncellemek 2 sorgu ile bunu yapabileceğini field3 ayrı sorguda gerekirse.

//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");
}

Ama umarım 1 sorguda bunu gerçekleştirmek için bir yol var?

1 Cevap

Birden sorguları yapmak gerekmez. Neden sadece koşullu dayalı sorgu dizesi yapısı yoktur ve bundan sonra sadece yürütme için DB adapater onu geçmek? Bu aşağıdaki gibi olabilir:

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