2009-09-18 3 views
0

J'essaie PDO en PHP pour la première fois. Je pensais que PDOStatement-> bindParam() serait un moyen cool de définir les types de données des valeurs que je passe à la requête sql. Mais de toute façon ça ne marche pas pour moi. Par exemple, je définis le type d'une variable sur INT dans l'appel bindParam. Mais il ne lance toujours pas d'erreur même lorsque je lui passe des valeurs de chaînes pures. Peut-être que je fais quelque chose de mal. Voici l'extrait du code ..En PHP, le PDO :: PDOStatement-> bindParam() fonctionne-t-il comme prévu?

$query = "select * from PDO_TABLE where A_COLUMN = :test1 or B_COLUMN = :test2"; 

$test1 = '0'; 
$test2 = 'a'; 
$preparedStatement = $conn->prepare($query); 

echo $preparedStatement->bindParam(':test1', $test1, PDO::PARAM_INT); 
echo $preparedStatement->bindParam(':test2', $test2, PDO::PARAM_INT); 

$preparedStatement->execute(); 

Est-ce que je fais tout correctement? N'est-ce pas supposé lancer une erreur pour le paramètre test2?

Répondre

2

PDO ne lancera pas d'exception ou déclenchera une erreur mais au mieux convertira le paramètre en entier/long. E.g. en pdo_stmt.c:

if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_INT && Z_TYPE_P(param->parameter) == IS_BOOL) { 
    convert_to_long(param->parameter); 
} 

à savoir si vous avez enregistré un paramètre comme PDO_INT mais la variable est titulaire d'une AOP booléenne convertit le bool à un int/long.

+0

ohh..k..il existe un moyen de savoir quelle requête est finalement utilisée pour récupérer les résultats de la base de données. c'est-à-dire, puis-je savoir quelle valeur de la variable problématique est finalement transmise à la requête? – Chantz

Questions connexes