Question

Je teste PDO en PHP pour la première fois. Je pensais que PDOStatement- > bindParam () serait un bon moyen de définir les types de données des valeurs que je transmettrai à la requête SQL. Mais de toute façon cela ne fonctionne pas pour moi. Par exemple, je mets le type d'une variable à INT dans l'appel bindParam. Mais il ne génère toujours pas d'erreur même lorsque je lui passe des valeurs de chaîne pures. Peut-être que je fais quelque chose de mal. Voici l'extrait du code ..

$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é jeter une erreur sur le paramètre test2?

Était-ce utile?

La solution

PDO ne lève pas d'exception ni ne génère d'erreur, mais convertit au mieux le paramètre en entier / long. Par exemple. dans 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);
}

i.e. si vous avez enregistré un paramètre sous PDO_INT mais que la variable contient un booléen, le PDO convertit le booléen en int / long.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top