web-dev-qa-db-fra.com

Requête de base de données où () valeur est un nombre

Comme nous le savons, toute valeur définie dans une requête de base de données doit toujours être échappée dans Joomla à l'aide de $db->quote($value).

Lorsque vous définissez des nombres en tant que variable, vous utiliserez normalement (int) Pour le définir en tant qu'entier.

Alors, que ferait-on lors de la définition d’un nombre en tant que valeur dans une clause where() pour une requête de base de données? Ne pourrions-nous le définir que comme un entier, comme ceci:

$id = (int)555;
->where($db->quoteName('id') . ' = ' . $id);

ou aurions-nous seulement besoin de le citer comme suit:

$id = 555;
->where($db->quoteName('id') . ' = ' . $db->quote($id));

ou ferions-nous les deux?

$id = (int)555;
->where($db->quoteName('id') . ' = ' . $db->quote($id));

Quelqu'un pourrait-il s'il vous plaît faire la lumière juste pour que je sache s'il vous plaît?

6
Lodder

Bonne question celle-ci. J'ai été dans cette considération à plusieurs reprises aussi. Je ne sais pas s'il existe une seule bonne réponse ni si ma réponse sera tout à fait correcte et clairement expliquée.

D'après ce que j'ai vu jusqu'à présent, la base de données comprendra une requête contenant un nombre/un entier dans une instruction where et la comparera à son ensemble d'enregistrements, même si le champ que nous comparons est défini en tant que (INT), (TEXT ), (VARCHAR) ou (CHAR), avec ou sans guillemets.

Cependant, l'un des points critiques dans de tels cas est la cohérence lors de l'interrogation de la base de données avec les bons types de données. Ainsi, lors de la recherche d'un champ INT, la variable incluse dans la requête doit toujours être transformée en entier.

Ce faisant, en passant un entier à la base de données, nous sommes quelque peu sûrs des données que nous envoyons ... La base de données comprendra et traitera la requête.

De mes tests avec ce cas, ma conclusion générale est que citer le nombre entier ne fera aucune différence dans les résultats et la stabilité entière. (Sauf s'il existe des cas spécifiques auxquels je ne peux pas penser pour le moment, où citer ou non un entier entraînera des résultats différents ou non souhaités). On dirait donc que cela dépend davantage du style de codage et de la cohérence du code.

Compte tenu de ce qui précède, il ne semble pas nécessaire de citer un nombre entier.

Il sera intéressant d’enquêter sur cette question dans l’ensemble du noyau de Joomla, de voir leurs pratiques en détail ou, au mieux, d’avoir l’avis de quelqu'un qui possède une connaissance et une expérience approfondies dans ce domaine.

3
FFrewin