2

概要

MSSQLデータを適切にサニタイズする方法が必要です。私たちは皆知っaddslashes()ていて、htmlentities()それを切りません。

試みられた解決策と問題

調査した後、私はこのスレッドをここSOで見つけました。タイプの列に挿入する必要があるまで、それはうまく機能しましたtext。その中にHEXリテラルを挿入しようとすると、次のようになります。

Operand type clash: varbinary is incompatible with text

必要なもの

したがって、HEXリテラルを含まない別の確実なサニタイズ戦略が必要です。または、HEXをに挿入するときにこのエラーを克服するための支援が必要textです。

私の現在の方法:

public static function dbSanitize( $str ){
    if( is_numeric( $str ) )
        return $str;
    $unpacked = unpack( 'H*hex', $str );
    return '0x' . $unpacked['hex'];
}

私のクエリ

[INSERT INTO myTable ( C1,Text2,C3,C4,C5,C6,Text7,C8 ) VALUES ( 111,0x3c703e0a0932323232323c2f703e0a,1,1,1,0,0x5b7b2274797065223a2274657874222c226c6162656c223a224669656c64204e616d65222c2264657363223a22222c224669656c644944223a2239373334313036343937227d5d,1316471975 )].

大量のテキストデータに別のオプションがある場合は、列の型キャストを変更するだけです。

あなたが提供できるどんな助けにも感謝します!!

4

1 に答える 1

2

文字列を追加してクエリを作成しないでください。バインドされたフィールドを使用します。参照:http ://www.php.net/function.mssql-bind.php

または、sqlsrvライブラリを使用している場合はhttp://www.php.net/function.sqlsrv-query.php$paramsの変数(必要です)。

于 2011-09-19T22:55:23.770 に答える