PHPでは、PDO :: PDOStatement-> bindParam()は期待どおりに動作しますか?
質問
PHPで初めてPDOを試しています。 PDOStatement-> bindParam()は、SQLクエリに渡す値のデータ型を設定するクールな方法だと思いました。しかし、どういうわけかそれは私のために動作しません。たとえば、bindParam呼び出しで変数の型をINTに設定します。しかし、純粋な文字列値を渡してもエラーは発生しません。たぶん私は何か間違ったことをしている。コードのスニペットは次のとおりです。
$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();
すべてを適切に行っていますか?これは、パラメータtest2のエラーをスローすることになっていますか?
解決
PDOは例外をスローしたりエラーを発生させたりすることはありませんが、せいぜいパラメーターを整数/ longに変換します。 例えば。 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。パラメーターをPDO_INTとして登録しているが、変数がブールPDOを保持している場合、boolをint / longに変換します。
所属していません StackOverflow