2009-05-22 8 views
6

Czy ktoś może podać przykład, jak usunąć wiersz w mysql z ramką Zend, gdy mam dwa warunki?Przykład Usunięcia wielu warunków za pomocą Zend framework

tj: (starając się to zrobić)

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

Mój kod (który zawodzi marnie wygląda następująco)

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

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

Odpowiedz

8

Zamiast tablicy asocjacyjnej, powinno być po prostu przechodząc w sposób tablica wyrażeń kryteriów, ala:

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

(i upewnij się, że uciekniesz z tych wartości Ely, jeśli idziesz z danych wprowadzonych przez użytkownika)

+0

Będzie to wyjdzie jak: "DELETE FROM wiadomości GDZIE message_id = 1 i user_id = 2" lub „DELETE FROM wiadomości WHERE (message_id = 1) oraz (id_użytkownika = 2)? – MichaelICE

+0

Najpierw myślę, że – xenon

+0

Jeśli prawidłowo odczytam źródło, to faktycznie umieści nawiasy wokół każdego ... /library/Zend/Db/Adapter/Abstract.php, _whereExpr (linia 564 lub więcej ...) –

29

Lepiej użyć tego:

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

Symbole zastępcze() get podstawione wartości, ucieka znaków specjalnych i stosuje cytaty wokół niego.

-3

Użyj tego, czy działa ...

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

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

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

Kopiuj/Wklej nie jest dobrą odpowiedzią make – Andrew

+0

Zwłaszcza, gdy odpowiedź pokazuje "aktualizację" zamiast "usunąć". –