Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Avec un : $select de type Zend_Db_Select,
vaut-il mieux écrire : $select->from('statut', array('count(1) as nb'));
ou : $select->from('statut', array('nb' => new Zend_Db_Expr('count(1)')));
La chaîne de requête construite, et vérifiable avec un $select->__toString(), ne montre aucune différence syntaxique.
Quel est le rôle exact de Zend_Db_Expr ?
Je remarque que si l'expression n'est pas, comme dans mon exemple, une fonction, mais le simple nom d'un champ par exemple, celui-ci n'est pas préfixé du nom de la table et c'est dans ce sens que j'avais reçu conseil d'utiliser la deuxième méthode.
Qui reconnaît ici l'utilisation d'une fonction ? Zend_DB_Select, le driver PDO ?
Hors ligne
Tout est dans la source :
* This class simply holds a string, so that fragments of SQL statements can be
* distinguished from identifiers and values that should be implicitly quoted
* when interpolated into SQL statements.
*
* For example, when specifying a primary key value when inserting into a new
* row, some RDBMS brands may require you to use an expression to generate the
* new value of a sequence. If this expression is treated as an identifier,
* it will be quoted and the expression will not be evaluated. Another example
* is that you can use Zend_Db_Expr in the Zend_Db_Select::order() method to
* order by an expression instead of simply a column name.
*
* The way this works is that in each context in which a column name can be
* specified to methods of Zend_Db classes, if the value is an instance of
* Zend_Db_Expr instead of a plain string, then the expression is not quoted.
* If it is a plain string, it is assumed to be a plain column name.
Hors ligne
Autrement dit RTFM !
Ok pour ma première question, Zend_Db_Expr ne sert qu'à identifier une chaîne qui ne doit pas être quotée.
Mais ça ne répond pas à la deuxième qui est peut-être plus intéressante.
Hors ligne
PDO n'a aucune connaissance de Zend_Db_Expr. Ce sont les classes Zend_Db_* qui l'utilisent.
Hors ligne
Ah bah oui, PDO est indépendant de ZF, ça j'avais bien compris, j'ai dû très mal m'exprimer !
J'y reviendrai un peu plus tard...
Hors ligne