5

パラメータを使用した単純な 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 する必要はありません (または、誰もが行うことですか?)。

ありがとうございました。

4

2 に答える 2

4

これに似た問題がありました。私たちの場合、/etc/odbc.iniファイルに次のものがありました。

[ServerAlias]
Driver = FreeTDS
Server = 1.2.3.4
PORT = 1433
TDS_Version = 8.0

をすべてに変更するTDS_Versionと、7.2すべてのバインド クエリが正しく機能するようになることがわかりました。

[ServerAlias]
Driver = FreeTDS
Server = 1.2.3.4
PORT = 1433
TDS_Version = 7.2

この理由については定かではありませんが、おそらくどこかに文書化されているのではないかと思います。

于 2016-07-15T08:46:04.683 に答える
0

フィールド タイプを CHAR または VARCHAR に変更しようとしましたか? (このタイプの非互換性を持つ VARCHAR(MAX) ではありません)。

または、データ型を変換しようとしましたか?

$val = 'assessment';
$query = $DBH->prepare(
    "SELECT TOP 1 * FROM bksb_Resources WHERE
    CONVERT(VARCHAR, ResourceType) = :myp");
$query->bindParam(':myp', $val, PDO::PARAM_STR);
$query->execute();

申し訳ありませんが、コードをテストするための MS SQL Server を持っていませんが、次のページからヒントを得ることができます: https://msdn.microsoft.com/en-us//library/ms176089.aspx

次の警告に注意してください。

コード ページの変換は、char および varchar データ型ではサポートされていますが、テキスト データ型ではサポートされていません。以前のバージョンの SQL Server と同様に、コード ページの変換中のデータ損失は報告されません。

それが役に立てば幸い!

于 2015-02-27T19:01:19.703 に答える