パラメータを使用した単純な WHERE 句を機能させることができないようです。次のようなエラー メッセージが常に表示されます。
[Microsoft][ODBC SQL Server Driver][SQL Server]The data types varchar(max) and text are incompatible in the equal to operator. (SQLExecute[402] at ext\pdo_odbc\odbc_stmt.c:254)
このクエリを複数の異なる方法で試しました。
名前:
$query = $DBH->prepare("SELECT TOP 1 * FROM bksb_Resources WHERE ResourceType = ?");
$query->execute( array('assessment') );
名前なしで bindValue を使用して文字列に設定する
$query = $DBH->prepare("SELECT TOP 1 * FROM bksb_Resources WHERE ResourceType = ?");
$query->bindValue(1, 'assessment', PDO::PARAM_STR);
$query->execute( );
名前を付け、bindParam を使用して文字列に設定します。
$val = 'assessment';
$query = $DBH->prepare("SELECT TOP 1 * FROM bksb_Resources WHERE ResourceType = :myp");
$query->bindParam(':myp', $val, PDO::PARAM_STR);
$query->execute( );
しかし、どのように実行しても、常にこのエラー メッセージが表示されます。
問題の列のタイプは varchar(max) であるため、おそらく、送信されるパラメーターが文字列値 (char, varchar) であると指定した場合でも、「テキスト」タイプであると想定されています。
別のソフトウェア用のデータベースであるため、データベースを変更できません。
これを回避する方法は何ですか?このような where 句を実行するたびに CAST する必要はありません (または、誰もが行うことですか?)。
ありがとうございました。