1

在我们的应用程序中,我们使用 Ms Sql 数据库,它托管在 sqladmin.winhost.com 上。我们安装了带有 ODBC 驱动程序的 PHP 以及 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);

    ?>

任何人都可以指导我吗?

提前致谢。

4

1 回答 1

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 应用程序中是兼容的。这就是我的要求。

于 2017-08-09T03:44:18.200 回答