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

1

Другие решения

Других решений пока нет …