Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 05-10-2009 17:28:56

Junk
Membre
Lieu: Paris
Date d'inscription: 18-09-2009
Messages: 27

plusieurs ? dans une close where

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 sad

Merci d'avance pour vos réponses et conseils smile

Hors ligne

 

#2 05-10-2009 17:45:48

-=blu3+3y3s=-
Membre
Lieu: Toulouse
Date d'inscription: 01-04-2008
Messages: 47

Re: plusieurs ? dans une close where

salut,
tu dois chainer les where pour faire ce que tu veux.

Code:

$table->select()->from($table, 'nom')->where('id = ?', 2)->orWhere('id = ?',  4);

Bye

Hors ligne

 

#3 05-10-2009 21:43:09

Junk
Membre
Lieu: Paris
Date d'inscription: 18-09-2009
Messages: 27

Re: plusieurs ? dans une close where

Bonsoir,

Merci pour ta réponse -=blu3+3y3s=- smile

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 sad

Dans mon bloc (condition2 OR condition3) j'aimerais pouvoir utiliser deux variables récupérées d'un formulaire big_smile

Hors ligne

 

#4 06-10-2009 11:22:43

Junk
Membre
Lieu: Paris
Date d'inscription: 18-09-2009
Messages: 27

Re: plusieurs ? dans une close where

Bonjour,

Vraiment personne pour une petite explication ?

Hors ligne

 

#5 06-10-2009 23:58:29

tonton flubb
Membre
Date d'inscription: 11-10-2008
Messages: 48
Site web

Re: plusieurs ? dans une close where

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 :

Code:

$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);

Florent - Développeur Web

Hors ligne

 

#6 07-10-2009 08:35:19

Junk
Membre
Lieu: Paris
Date d'inscription: 18-09-2009
Messages: 27

Re: plusieurs ? dans une close where

Bonjour,

Merci pour cette précision tonton flubb smile

J'avais effectué ma requête à la mano... C'est une des limites du framework quand même  hmm

Hors ligne

 

#7 07-10-2009 09:05:40

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: plusieurs ? dans une close where

Hello,

Un peu tard mais c'est effectivement dans la doc sous cette forme : http://framework.zend.com/manual/en/zen … ple-parens

@+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#8 07-10-2009 11:08:54

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: plusieurs ? dans une close where

pour faire ça il faut utiliser Zend_Db_Expr
pour info il est possible d'utiliser des argument nommé à la place des ?

Code:

$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

Code:

$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

Code:

$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.

Code:

$stmt = $db->prepare($s);
$stmt->execute(array('cond1' => $contion1));
$rows = $stmt->fetchAll();

mais avec mysqli cela plantait il fallait utiliser deux paramètres

Code:

$s= $table->select()
      ->from('table', 'nom')
      ->where('condition1 = :cond1')
      ->where('condition2 = :cond2')

Code:

$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

Code:

    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

 

#9 08-10-2009 10:49:02

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: plusieurs ? dans une close where

Je n'utilise pas Zend_Db*
Mais, vous ne pouvez pas faire ca :

Code:

$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)


----
Gruiiik !

Hors ligne

 

#10 12-10-2009 11:15:03

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: plusieurs ? dans une close where

Tu as aussi le orWhere()


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages