PHPでは、PDO :: PDOStatement-> bindParam()は期待どおりに動作しますか?

StackOverflow https://stackoverflow.com/questions/1445540

  •  22-07-2019
  •  | 
  •  

質問

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に変換します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top