Вставка арабского текста в 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. Это то, что было моим требованием.