2017-03-08 61 views
1

在我們的應用程序中,我們使用Ms Sql數據庫,它位於sqladmin.winhost.com上。我們用ODBC驅動程序和Windows服務器安裝PHP。該數據庫使用歸類「Arabic_CI_AI」。在ODBC中插入阿拉伯語文本使用MSSQL的PHP​​驅動程序

下面是簡單地將數據插入表的代碼。查詢完全執行成功,但是阿拉伯數據丟失並且冒號一些隨機字符串是表格。

當$ request ['username']的值在dtabase中是「احمدعليعريبي」時,它會以一些隨機字符串接收。

<?php 

$connectionString = 'DRIVER={SQL Server};SERVER=' . SERVER_NAME . ';DATABASE=' . DB_NAME; 
$conn = odbc_connect($connectionString, USER_NAME, PASSWORD); 
    $request=$_POST;  
echo $sql="INSERT INTO MobileNotificaiton.emp_user VALUES('[email protected]','MXI',200,'{$request['username']}','123','12365897452',1,'','','','')";   

     $results = odbc_exec($conn, $sql); 

    $close = odbc_close($conn); 

    ?> 

任何一個可以指導我嗎?

在此先感謝。

+0

什麼是你的PHP應用程序內(阿拉伯語)數據的編碼? UTF-8? SQL Server中相應列的列類型是什麼? NVARCHAR? – erg

+0

在PHP應用程序中,阿拉伯語編碼是UTF-8,列類型是nvarchar,數據庫排序規則是阿拉伯語_CI_AI –

+0

您嘗試過'N'{$ request ['username']}''。在字符串之前放置'N'將確保使用unicode值。參見info [here](https://support.microsoft.com/en-ca/help/239530/you-must-precede-all-unicode-strings-with-a-prefix-n-when-you-deal-使用-unicode-string-constants-in-sql-server) – chrisuae

回答

1

經過一番研究,我找到了解決辦法。 我在PHP中將阿拉伯語文本轉換爲二進制文件,然後在使用MSSQL的CAST函數將數據插入到MSSQL時,將此二進制數據轉換爲其所需的數據類型。

$connectionString = 'DRIVER={SQL Server};SERVER=' . SERVER_NAME . ';DATABASE=' . DB_NAME; 
$conn = odbc_connect($connectionString, USER_NAME, PASSWORD); 
$request=$_POST;  
$data = iconv("UTF-8", "UCS-2LE", $request['username']); 
$unpacked = unpack('H*hex', $data); 
$username='0x' . strtoupper($unpacked['hex']); 

$sql="INSERT INTO MobileNotificaiton.emp_user VALUES('[email protected]','MXI',200,'{$username}','123','12365897452',1,'','','','')";   
$results = odbc_exec($conn, $sql); 
$close = odbc_close($conn); 

從數據庫中獲取數據時,我們使用相反的過程。這樣數據在.NET應用程序和PHP應用程序中是兼容的。這是我的要求。