views:

772

answers:

2

Can someone give me an example of how I would delete a row in mysql with Zend framework when I have two conditions?

i.e: (trying to do this)

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

My code (that is failing miserably looks like this)

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

$n = $db->delete('messages', $condition);
+3  A: 

Instead of an associative array, you should just be passing in an array of criteria expressions, ala:

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

(and make sure you escape those values appropriately if they're coming from user input)

great_llama
Will this come out as: "DELETE FROM messages WHERE message_id = 1 AND user_id = 2" or "DELETE FROM messages WHERE (message_id = 1) AND (user_id = 2) ?
Mike Curry
First one I believe
xenon
If I read the source correctly, it'll actually put the parentheses around each... /library/Zend/Db/Adapter/Abstract.php, _whereExpr (line 564 or so...)
great_llama
A: 

Better to use this:

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

The placeholder symbols (?) get substituted with the values, escapes special characters, and applies quotes around it.

robbie