2012-06-29 44 views
12

我目前遇到一個奇怪的錯誤。如何使用PDO將二進制數據插入MSSQL

的設置: MSSQL Server 2012的快與的LocalDB 目標表排序規則是:SQL_Latin1_General_CP1_CI_AS

PHP 5.3.9一個Zend服務器5.6 mcrypt的與MCRYPT_RIJNDAEL_256和MCRYPT_MODE_ECB

崇高文本2默認情況下,編碼(我讀它是UTF8 BOM)

我使用PDO與MSSQL服務器的官方MS適配器。除了一件事情之外,一切正常: 由於密碼,我無法在管理員表中寫入一行。

讓我們來看看我的加密的口令:

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管理中心,我可以插入我行具有完全相同的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)" 

我用準備好的發言和bindParam函數沒有額外的選項來執行我的SQL語句。

如果有人有一個想法,如何解決請讓我知道。任何幫助表示讚賞!

+2

不確定關於MS SQL,但必須有一種方法來聲明二進制列,即沒有編碼或排序規則。 –

+0

@Jack,感謝您的評論。之後,我嘗試了二進制和varbinary列,但那些也不起作用。 – Richard

+0

好的,有沒有辦法將參數綁定爲PDO中的二進制文件? –

回答

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); 
相關問題