Вставка арабского текста в ODBC PHP Драйвер с MSSQL

В нашем приложении мы используем базу данных MS Sql, и она размещена на sqladmin.winhost.com. Мы установили PHP с драйвером ODBC вместе с сервером Windows. База данных использует сопоставление " Arabic_CI_AI ".

Ниже приведен код простой вставки данных в таблицу. Запрос выполнен успешно, но арабские данные потеряны и введена некоторая случайная строка.

Когда значение $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('test@gmail.com','MXI',200,'{$request['username']}','123','12365897452',1,'','','','')";        

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

    $close = odbc_close($conn);

    ?>

Кто-нибудь может направить меня?

Заранее спасибо.

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('test@gmail.com','MXI',200,'{$username}','123','12365897452',1,'','','','')";        
$results = odbc_exec($conn, $sql);
$close = odbc_close($conn);

При получении данных из базы данных мы используем тот же процесс в обратном порядке. Таким образом, данные совместимы в приложении.NET и в приложении PHP. Это то, что было моим требованием.

Другие вопросы по тегам