Auto-encadrement des espaces réservés entre guillemets dans PDO en PHP
Techniquement, PDO encadre toutes les valeurs insérées avec des guillemets, les considérant comme des chaînes, même si ce sont en réalité des nombres. Ceci est permis par la syntaxe SQL. C'est pourquoi il n'est pas nécessaire d'encadrer les espaces réservés de guillemets si vous avez une valeur de type chaîne.
Regardons un exemple. Supposons que nous ayons une chaîne stockée dans une variable :
<?php
$name = 'name1';
?>
Il n'est pas nécessaire d'encadrer un espace réservé positionnel de guillemets dans ce cas :
<?php
$sql = 'SELECT * FROM users WHERE name=?';
$res = $pdo->prepare();
$res->execute([$name]);
?>
Un espace réservé nommé ne doit pas non plus être encadré de guillemets :
<?php
$sql = 'SELECT * FROM users WHERE name=:name';
$res = $pdo->prepare();
$res->execute(['name' => $name]);
?>
Le fait que les requêtes contiennent toujours des chaînes peut néanmoins parfois entraîner des problèmes de syntaxe SQL - dans les cas où la syntaxe exige obligatoirement des nombres. Dans ce cas, on peut utiliser une méthode alternative de liaison des paramètres, que nous aborderons dans les prochaines leçons.