2009-05-22 5 views
6

Quelqu'un peut-il me donner un exemple de la façon dont je supprimerais une ligne dans mysql avec Zend framework quand j'ai deux conditions?Exemple d'une suppression multi-conditions avec le framework Zend

à savoir: (essayant de le faire)

"DELETE FROM messages WHERE message_id = 1 AND user_id = 2" 

Mon code (qui ne ressemble misérablement comme ça)

// is this our message? 
$condition = array(
        'message_id = ' => $messageId, 
        'profile_id = ' => $userId 
); 

$n = $db->delete('messages', $condition); 

Répondre

8

Au lieu d'un tableau associatif, vous devriez juste être passait dans un tableau d'expressions de critères, ala:

$condition = array(
    'message_id = ' . $messageId, 
    'profile_id = ' . $userId 
); 

(et assurez-vous d'échapper à ces valeurs appropriées ely si elles viennent de l'entrée utilisateur)

+0

Est-ce que cela se fera comme: "SUPPRIMER des messages OU message_id = 1 ET user_id = 2" ou « Supprimer des messages OU (message_id = 1) ET (user_id = 2)? – MichaelICE

+0

Premier je crois – xenon

+0

Si je lis la source correctement, il mettra les parenthèses autour de chaque ... /library/Zend/Db/Adapter/Abstract.php, _whereExpr (ligne 564 ou plus) ...) –

29

Mieux vaut utiliser ceci:

$condition = array(
    'message_id = ?' => $messageId, 
    'profile_id = ?' => $userId 
); 

Les symboles d'espace réservé() se substituer aux valeurs, échappe des caractères spéciaux et applique des guillemets autour de lui.

-3

Utilisez ce, il travaille ...

$data = array(
    'bannerimage'=>$bannerimage 
); 

$where = $table->getAdapter()->quoteInto('id = ?', 5); 

$table->update($data, $where); 
+0

Copier/Coller n'est pas une bonne réponse make – Andrew

+0

Surtout quand la réponse montre une "mise à jour" au lieu d'une "suppression". –