Bonjour, j'ai lu dans la doc PDO que la principale différence lors du lien des paramètres est que execute() les lie automatiquement avec l'option PARAM_STR, tandis que bindParam permet de les lier en PARAM_INT, ou autre.

J'ai plusieurs questions :

- Que se passe-t-il lorsque PDO rencontre une chaîne de caractère alors qu'il attend un INT (erreur ? cast ?) ?

- Quel est le risque d'utiliser execute à la place de bindParam quand on utilise des INT ?

Explication. J'ai une table 'table' avec un champ 'id', avec execute() :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
$db->prepare("SELECT * FROM `table` WHERE id=:id");
$req->execute("id"=>$id);
En supposant que $id vaut 5, ça donne : SELECT * FROM `table` WHERE id='5'.

Alors que si j'avais utilisé bindParam(":id", $id, PDO::PARAM_INT), j'aurais eu : SELECT * FROM `table` WHERE id=5, avec vérification que $id est bien un INT.

Dans aucun des deux cas une injection SQL n'est possible car PDO échappe tout ce qui est guillemet..., ce qui évite dans le premier cas de refermer ' et dans le deuxième cas, l'apostrophe ne pourra pas passe car ce n'est pas un INT.

Y a-t-il un risque à utiliser execute() à la place de bindParam() ?