Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Si je fais ceci ce fonctionne bien:
$table->select()->from($table, 'nom')->where('id = ? ', 2);
par contre je voudrais faire quelque chose comme ça:
$table->select()->from($table, 'nom')->where('id = ? OR id = ?', 2, 4);
C'est à dire mettre plusieures variables dans une seule close where(), mais cela ne fonctionne pas
Merci d'avance pour vos réponses et conseils
Hors ligne
salut,
tu dois chainer les where pour faire ce que tu veux.
$table->select()->from($table, 'nom')->where('id = ?', 2)->orWhere('id = ?', 4);
Bye
Hors ligne
Bonsoir,
Merci pour ta réponse -=blu3+3y3s=-
Mais ce que je voudrais c'est pouvoir faire:
SELECT * FROM matable WHERE condition1 AND (condition2 OR condition3)
alors que ce que tu me proposes, de chainer les "where" ne me convient pas puisque cela donne:
SELECT * FROM matable WHERE condition1 AND condition2 OR condition3
Ce qui est complètement différent
Dans mon bloc (condition2 OR condition3) j'aimerais pouvoir utiliser deux variables récupérées d'un formulaire
Hors ligne
Bonjour,
Vraiment personne pour une petite explication ?
Hors ligne
Salut,
De mémoire il n'est pas possible de faire ça directement avec les méthodes de Zend_Db étant donné que les parenthèses sont systématiquement ajoutées autour des clauses WHERE. Dans ce cas il faut que tu écrive un morceau de te requête à la main :
$table->select() ->from('table', 'nom') ->where('condition1 = ?', $condition1) ->where("condition2 = $condition2 OR condition3 = $condition3"); // SELECT table.nom FROM table WHERE condition1 = $condition1 AND (condition2 = $condition2 OR condition3 = $condition3);
Hors ligne
Bonjour,
Merci pour cette précision tonton flubb
J'avais effectué ma requête à la mano... C'est une des limites du framework quand même
Hors ligne
Hello,
Un peu tard mais c'est effectivement dans la doc sous cette forme : http://framework.zend.com/manual/en/zen … ple-parens
@+
Hors ligne
pour faire ça il faut utiliser Zend_Db_Expr
pour info il est possible d'utiliser des argument nommé à la place des ?
$s= $table->select() ->from('table', 'nom') ->where('condition1 = :cond1')
il suffit ensuite de passer un tableau associatif l'ors de l'exécution de la requête
$stmt = $db->prepare($s); $stmt->execute(array('cond1' => $contion1)); $rows = $stmt->fetchAll();
il y avait un bug dans la version 1.0.4 sur l'utilisation multiple d'un même paramètre lorsqu'on utilisait mysqli
$s= $table->select() ->from('table', 'nom') ->where('condition1 = :cond1') ->where('condition2 = :cond1')
on utilise deux fois le paramètre cond1
normalement un ne le passe qu'une seule fois dans le tableau de cette façon.
$stmt = $db->prepare($s); $stmt->execute(array('cond1' => $contion1)); $rows = $stmt->fetchAll();
mais avec mysqli cela plantait il fallait utiliser deux paramètres
$s= $table->select() ->from('table', 'nom') ->where('condition1 = :cond1') ->where('condition2 = :cond2')
$stmt = $db->prepare($s); $stmt->execute(array('cond1' => $contion1, 'cond2' => $contion1)); $rows = $stmt->fetchAll();
ce qui enlevait de fait l'intérêt de la chose.
Je ne sais pas où en est ce bug.
pour info voici un exemple de code tirré d'une de mes appli
public function getUserMailById($id) { try { $select = $this->_db->select(); // @var $select Zend_Db_Select $select ->from('USR', array( $this->_db->quoteIdentifier('mail') => 'USR_MAIL', $this->_db->quoteIdentifier('name') => 'USR_NAME', $this->_db->quoteIdentifier('firstname') => 'USR_FIRSTNAME' )) ->where('USR_ID = :id') ; #Fast_Debug::show('$select', "$select"); $statement = $this->_db->prepare($select); $statement->setFetchMode(Zend_Db::FETCH_OBJ); $statement->execute(array('id' => $id)); return $statement->fetch(); } catch (Exception $e) { $this->_traceException(1, $e); return false; } }
[modification]
attention j'ai longtemps utilisé les paramètres nommes en les nommant avec un _ ex: 'USR_ID = :_id'
jusqu'au jour où je suis passé sous oracle et là rien ne fonctionnait oracle ne permet pas d'utiliser un nom de paramètre commençant par _
nottez bien au passage que c'est le moteur de la base qui fait le mapping entre les valeur des paramètres et les noms. ce n'est pas php ce n'est donc pas la même chose que de substituer des chaine de caractères
A+JYT
Dernière modification par sekaijin (07-10-2009 11:13:41)
Hors ligne
Je n'utilise pas Zend_Db*
Mais, vous ne pouvez pas faire ca :
$table->select()->from($table, 'nom')->where('id = ? OR id = ?', array(2, 4));
(passé un tableau en paramètre)
Dernière modification par nORKy (08-10-2009 10:49:19)
Hors ligne
Tu as aussi le orWhere()
Hors ligne