6

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);
Kladskull
  • 10,332
  • 20
  • 69
  • 111

3 Answers3

29

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
  • 1,103
  • 1
  • 10
  • 13
8

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
  • 11,481
  • 4
  • 34
  • 29
  • 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) ? – Kladskull May 22 '09 at 20:55
  • 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 May 22 '09 at 23:06
-3

Use this , it is working...

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

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

$table->update($data, $where);
WrightsCS
  • 50,551
  • 22
  • 134
  • 186