# PHP > PHP & Base de donnes > [PDO] Execute() ou bindParam()

## Iansus

Bonjour, j'ai lu dans la doc PDO que la principale diffrence lors du lien des paramtres 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 chane de caractre 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() :



```

```

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 vrification 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 deuxime 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() ?

----------


## redoran

Salam ; 



> Que se passe-t-il lorsque PDO rencontre une chane de caractre alors qu'il attend un INT (erreur ? cast ?) ?


automatiquement vous aurez un message derreur mettant en exergue d'incompatibilit de paramtre. 
bindParam  Lie un paramtre  un nom de variable spcifique avant d'excut la requte.



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


exemple :
http://php.net/manual/fr/pdostatement.bindparam.php


```

```

 ::ccool::

----------


## Iansus

Merci, cela rponde grande partie  ma question. En revanche, j'ai regard du ct de PHP.net, et je n'ai rien vu qui indique si lier un entier avec execute()  la place de bindParam() rend la script plus vulnrables  certaines injections SQL.

----------


## redoran

Salam ; 
avec PDO et les requtes prpars pas de soucis pour les injections sql. 
l'avantage c'est l'utuilisation des exceptions :


```

```

je crois qu'il faut pass par le bindparam ou bindvalue ensuite excut la requte xecute() c'est l'idal.
je vous renvois a la doc une autre fois.  ::ccool:: 
http://www.php.net/manual/fr/pdo.setup.php

----------

