В нашем приложении мы используем базу данных 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('[email protected]','MXI',200,'{$request['username']}','123','12365897452',1,'','','','')";
$results = odbc_exec($conn, $sql);
$close = odbc_close($conn);
?>
Кто-нибудь может направить меня?
Заранее спасибо.
После некоторых исследований я нашел решение.
Я преобразовал арабский текст в двоичный файл в 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. Это то, что было моим требованием.
Других решений пока нет …