2009-10-22 6 views
2

Si je veux utiliser la méthode Zend_Db_Table->update() pour mettre à jour ma table avec des données, je ne trouve quand même pas l'utilité d'utiliser des variables bind dans la clause "where".Comment utiliser les variables bind avec Zend_Db_Table-> update() dans la clause where

La signature de la méthode est:

int update($data, array|string $where) 

Habituellement, vous appelez la méthode comme ceci:

$table = new Bugs(); 

$data = array(
    'updated_on'  => '2007-03-23', 
    'bug_status'  => 'FIXED' 
); 

$where = $table->getAdapter()->quoteInto('bug_id = ?', 1234); 

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

quoteInto va tout simplement pour échapper à la variable, lie pas.

Il doit y avoir un moyen d'utiliser des variables de liaison, sinon un SGBD ne mettra pas efficacement en cache cette requête. Est-ce que je manque quelque chose, ou est-ce un oubli de la part de Zend?

Répondre

4

Vous ne mettez à jour que les données, le SGBDR (je suppose que MySQL) ne met pas en cache les requêtes UPDATE. (? garantie de bonne exécution) Si vous voulez continuer à utiliser les variables de liaison, vous devrez utiliser des instructions préparées:

$db = Zend_Db_Table_Abstract::getDefaultAdapter(); 
$stmt = $db->prepare("UPDATE table SET key = :key, value = :value"); 

foreach ($data as $key=>$value) { 
    $stmt->bindParam('key', $key); 
    $stmt->bindParam('value', $value); 
    $stmt->execute(); 
} 

Mais si vous avez des millions de commandes UPDATE dans un lot, je ne pense pas que vous devriez la peine avec ça. Utilisez simplement la table $ table-> update ($ data, $ where);

+0

Merci. J'utilise Oracle dans une application d'entreprise interne. Vous avez raison, la performance n'est pas un problème en soi - j'ai posé cette question parce que j'aime suivre les meilleures pratiques lorsque c'est possible. Je peux donc réécrire mon code comme vous le suggérez ou accepter cette limitation avec Zend_Db_Table. C'est décevant, car c'est seulement la clause WHERE qui n'est pas liée - la clause SET utilise des variables liées sous le capot. On pourrait penser qu'ils fourniraient un moyen d'utiliser des variables liées pour toutes les parties de la requête. – asgeo1

Questions connexes