Page 1 sur 1

Pb de syntaxe

Posté : 11 sept. 2013, 20:47
par klooq
Bonjour à tous,
Je suis désolé pour cette question qui sera sans doute très basique, mais je n'arrive pas à trouver une réponse sur le net.
A noter que je débute totalement en PHP/Mysql, ce qui ne facilite pas la chose ...
Il s'agit en fait d'une instruction DRUPAL 7, mais je crois comprendre que le principe est directement issu des PDOs PHP.
Voici donc ma question:

Je n'arrive pas à comprendre la différence entre ces deux syntaxes:
$node_title = db_query('SELECT title FROM {node} WHERE nid = :nid', array(':nid' => $nid));
$node_title = db_query('SELECT title FROM {node} WHERE nid = $nid');
Je suis également preneur d'un lien (si possible français) qui expliquerait clairement ce principe.

Merci d'avance

Re: Pb de syntaxe

Posté : 11 sept. 2013, 21:36
par moogli
salut,

je ne connais pas drupal mais la syntaxe est assez standard.

la seconde syntaxe c'est une requête simple (avec une faille type injection sql a priori).

La seconde est la syntaxe habituelle des requêtes préparées.

Une requête préparée c'est une requête standard dans laquelle on remplace les valeurs par des "tag ou token" qui seront remplacé à l’exécution.
L'avantage c'est que la requête est "compilée" sur le serveur et que pour le réemploie il suffit de fournir les données. (donc gain de performance).
c'est généralement une façon de faire utilisé par abus, simplement parce que pdo protège directement les données ainsi (plutôt que de le faire à la main).

bref dans le premier cas d'utilisation il s'agit d'une requête préparé dont ':nid' sera remplacé par la valeur fournit dans le tableau en second paramètre.

dans les deux cas je suppose que {node} sera remplacé à l’exécution par le nom de la table (je ne pense pas que ce nom possible pour un nom de table).

@+

Re: Pb de syntaxe

Posté : 12 sept. 2013, 11:13
par klooq
Bonjour Moogli,
Merci beaucoup pour ta réponse.
Il ne s'agirait donc que d'une technique de protection contre les failles de sécurité...
En même temps, si ça fonctionne, c'est déjà beaucoup !
Donc, pas de différence fondamentale (sur le fond) entre les deux techniques.

Merci pour cette réponse rapide.
Cdt