12

現在、奇妙なエラーが発生しています。

セットアップ:localdbを使用したMSSQL Server 2012 Expressターゲットテーブルの照合は次のとおりです:SQL_Latin1_General_CP1_CI_AS

Zend Server5.6MCryptでのPHP5.3.9とMCRYPT_RIJNDAEL_256およびMCRYPT_MODE_ECB

Sublime Text 2のデフォルトのエンコーディング(UTF8 BOMと読みました)

MSSQLサーバーの公式MSアダプターでPDOを使用しています。パスワードが原因で管理者テーブルに行を書き込めないということを除けば、すべてが正常に機能します。

私の暗号化されたパスワードを見てみましょう:

y"ûƒ^äjw¾bðúl5êù-Ö=W¿Š±¬GP¥Œy÷&ø

これはPDOトレースです。

Array
(
    [0] => IMSSP
    [1] => -7
    [2] => An error occurred translating string for input param 3 to UCS-2: No mapping for the Unicode character exists in the target multi-byte code page.


)
SQL: [120] INSERT INTO administrator ( [username], [email], [password], [section] )  VALUES(:username, :email, :password, :section)
Params:  4
Key: Name: [9] :username
paramno=0
name=[9] ":username"
is_param=1
param_type=2
Key: Name: [6] :email
paramno=1
name=[6] ":email"
is_param=1
param_type=2
Key: Name: [9] :password
paramno=2
name=[9] ":password"
is_param=1
param_type=2
Key: Name: [8] :section
paramno=3
name=[8] ":section"
is_param=1
param_type=2

MSSQL Management Centerを使用すると、まったく同じSQLクエリで行を挿入できます。カラムのセットアップは問題ないと思います。

    ["id"]=>
    string(3) "int"
    ["username"]=>
    string(12) "nvarchar(45)"
    ["email"]=>
    string(12) "nvarchar(45)"
    ["password"]=>
    string(12) "varbinary(45)"
    ["section"]=>
    string(11) "nvarchar(7)"
    ["country_code"]=>
    string(11) "nvarchar(2)"

SQLステートメントを実行するために、プリペアドステートメントとbindParam追加オプションのない関数を使用します。

誰かがアイデアを持っているなら、それを解決する方法を私に知らせてください。どんな助けでも大歓迎です!

4

1 に答える 1

2

照合を、utf8_unicode_ciこれらの少数の無人文字を処理するようなものに変更する必要があります。

また、次のようなことを試してください。

$db = new PDO('foo', 'bar', 'blo');
$stmt = $db->prepare("select foo, bar from table where id=?");
$stmt->execute(array($_GET['id']));
$stmt->bindColumn(1, $type, PDO::PARAM_STR, 256);
$stmt->bindColumn(2, $lob, PDO::PARAM_LOB);
$stmt->fetch(PDO::FETCH_BOUND);
header("Content-Type: $type");
fpassthru($lob);

タイプを再確認するには(これがエラー/バグが発生し始める場所です)、おそらく上記の例の最後の行の代わりに、この確認を行います。

if (is_string($lob)) echo $lob;
else fpassthru($lob);
于 2012-07-04T08:20:18.373 に答える