0

Microsoft SQL Server で PHP PDO インターフェイスを使用する際に問題があります。問題は、MS SQL Server の関数で使用するために PHP の数値を変換することです。次のステートメントを使用して、特定のレコードを削除します。

$sql = "DELETE FROM table WHERE SUBSTRING(attribute, 1, ?) = ?";

このステートメントをコードで準備して実行します (少し縮小)。

$query = $pdo->prepare ($sql);
$query->execute (array (strlen ('Text'), 'Text')); 

しかし、クエリは常に失敗します。エラーは次のとおりです。

SQLSTATE[42000]: [Microsoft][SQL Server Native Client 11.0][SQL Server]部分文字列関数の引数 3 の引数データ型 nvarchar が無効です。

strlen からの数値が数値に解析されていないと想定していますが、これを修正する方法がわかりません (クエリに手動で追加する以外は)。

これらのリンクを見つけましたが、あまり役に立ちません。

http://social.msdn.microsoft.com/Forums/en-US/sqldriverforphp/thread/0f09ac5e-62cd-4ccf-b2cb-848aad23811e

http://drupal.org/node/1169202

Drupal の担当者にも同じエラーがありましたが、キャストを使用して関数を再作成することで修正しました。これを修正する他の方法はありますか?

ありがとう。

4

2 に答える 2

0

試す:

$query = $pdo->prepare ($sql);
$query->execute (array ((int) strlen ('Text'), 'Text')); 
于 2012-06-10T00:41:08.457 に答える
0

これで解決するかどうかはわかりませんが、次のような方法を試してください

$length = strlen('Text');
$text = "Text";

$sql = "DELETE FROM table WHERE SUBSTRING(attribute, 1, :len) = :text";
$query = $pdo->prepare ($sql);
$query->bindParam(':len', $length, PDO::PARAM_INT);
$query->bindParam(':text', $text, PDO::PARAM_STR);
$query->execute(); 
于 2012-06-09T23:23:56.143 に答える