mysqliではなくPDOプリペアドステートメントを使用するようにアプリを変換してきましたが、奇妙な問題が発生しています。データベースに、フィールドがnullになると予想されるレコードがいくつかあります。'null'(文字列)または''(空の文字列)ではなく、NULLです。私はクエリを動的に構築するので、過去にオブジェクトでnull変数に遭遇したとき、次のようにクエリを構築していました。
WHERE fieldName is null;
そして、フィールドがnullの場合、期待される結果が得られます。
PDOを使用すると、クエリは結果を返さず、エラーも発生しません。それは単に私が期待するレコードを返さないだけです。構築されたクエリをエコーしてMySQLで直接実行すると、期待どおりの結果が得られますが、アプリケーション内では結果が返されません。
私が試したことのいくつかには、次のようなクエリの作成が含まれます。
WHERE fieldName is null;
また
WHERE fieldName <=> null;
私はまた、次の標準的な準備されたステートメントを試しました:
WHERE fieldName = :fieldName
次に、これらの種類のステートメントをバインドします。
$stmt->bindParam(":$field", $value);
$stmt->bindParam(":$field", $value, PDO::PARAM_NULL);
$stmt->bindParam(":$field", null, PDO::PARAM_NULL);
$stmt->bindValue(":$field", null, PDO::PARAM_NULL);
$stmt->bindValue(":$field", null, PDO::PARAM_INT);
これに関する助けをいただければ幸いです。私のPHPバージョンは5.3.10で、MySQLは5.5.22です。副次的な質問として、bindParamとbindValueの違いについてはまだはっきりしていません。そのため、回答に含めることが理にかなっている場合は、この件についていくつか説明していただければ幸いです...