2010-04-28 7 views
4

Je ne sais pas si c'est possible. Sinon, faites le moi savoir. J'ai un PDO mysql qui met à jour 3 champs.Mettre à jour une requête avec conditionnel?

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

Mais je veux field3 à jour que lorsque $update3 = true; (ce qui signifie que la mise à jour field3 est contrôlée par une instruction conditionnelle)

Est-ce possible d'accomplir avec une seule requête?

je pouvais le faire avec 2 requêtes où je mets à jour field1 et field2 puis vérifiez la valeur booléenne et mise à jour field3 si nécessaire dans une requête distincte.

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

Mais j'espère qu'il y a un moyen d'accomplir ceci dans une requête?

+0

Pouvez-vous préciser, voulez-vous dire field3, plutôt que update3? Si oui, voulez-vous dire quand la nouvelle valeur que vous fournissez est vraie, ou la valeur existante? – JAL

+0

'update3' est un booléen, et' $ update3 = true; 'est la condition qui m'aidera à décider si je veux vraiment mettre à jour' field3 =: field3' ou non. Je vais mettre à jour la question pour la rendre plus claire. – dmontain

Répondre

5

Vous n'avez pas besoin d'effectuer plusieurs requêtes. Pourquoi ne structurez-vous pas simplement votre chaîne de requête en fonction de ce conditionnel, et après cela, transmettez-la simplement à votre adaptateur DB pour l'exécuter? Il pourrait être comme suit:

$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

Merci falomir. C'est ce qu'il a fait. – dmontain

Questions connexes