2017-03-08 12 views
1

우리의 응용 프로그램에서는 SQL 데이터베이스를 사용하고 있으며 sqladmin.winhost.com에서 호스트됩니다. 우리는 Windows 서버와 함께 ODBC 드라이버와 함께 PHP를 설치했습니다. 데이터베이스가 데이터 정렬 "Arabic_CI_AI"을 사용 중입니다.MSSQL을 사용하여 ODBC PHP 드라이버에 아랍어 텍스트 삽입

아래는 간단한 데이터를 표에 삽입하는 코드입니다. 쿼리는 완전히 성공했지만 아랍어 데이터는 잃어버린 일부 임의의 문자열 insted 테이블입니다.

$ request [ 'username']의 값이 데이터베이스에서 "احمد علي عريبي"일 때 임의의 문자열이 수신됩니다.

<?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이며 데이터베이스의 데이터 정렬은 Arabic_CI_AI입니다. –

+0

'N '{$ request ['username ']}'을 (를) 사용해 보셨습니까? 'N'을 문자열 앞에두면 유니 코드 값이 사용됩니다. 정보 [여기]를 참조하십시오. (https://support.microsoft.com/en-ca/help/239530/you-must-precede-all-unicode-strings-with-a-prefix-n-when-you-deal- with-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 응용 프로그램에서 호환됩니다. 그것이 나의 요구 사항이었습니다.