2009-05-22 3 views
6

Kann mir jemand ein Beispiel geben, wie ich eine Zeile in MySQL mit Zend Framework löschen würde, wenn ich zwei Bedingungen habe?Beispiel für eine Multi-Condition Delete mit Zend Framework

dh: (versucht, dies zu tun)

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

Mein Code (das versagt wie folgt aussieht kläglich)

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

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

Antwort

8

Statt einem assoziativen Arrays, sollten Sie nur in einem vorbei sein Array von Kriterienausdrücken, ala:

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

(und stellen Sie sicher, dass Sie diese Werte angemessen entgehen ely, wenn sie aus Benutzereingaben sind kommend)

+0

Wird diese kommen wie: "FROM Nachrichten DELETE WHERE message_id = 1 und user_id = 2" oder „FROM Nachrichten LÖSCHEN WHERE (message_id = 1) und (user_id = 2)? – MichaelICE

+0

Zuerst glaube ich – xenon

+0

Wenn ich die Quelle richtig gelesen habe, wird es tatsächlich die Klammern um jeden ... /library/Zend/Db/Adapter/Abstract.php, _whereExpr (Zeile 564 oder so ...) –

29

besser, diese zu verwenden:

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

Die Platzhalter-Symbole() mit den Werten ersetzt bekommen, entkommt Sonderzeichen und gilt Anführungszeichen um ihn herum.

-3

verwenden, es funktioniert ...

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

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

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

Kopieren/Einfügen ist keine gute Antwort machen – Andrew

+0

Vor allem, wenn die Antwort ein "Update" anstelle von einem "Löschen" zeigt. –