PHP插件中文SQLServer2008共享一个随机码解决方案
今天,当使用PHP操作数据库时,发现SQL Server 2008数据库中的中文字段是随机代码。以下是我开始的一些事情:开发环境是php5.3.3 + apache2.2.17 + SQL Server 2008,PHP脚本文件的编码是UTF-8,传递到数据库的编码是GB2312(SQL Server,是默认的字符编码,我不确定),我用的是微软的官方sqlsrv库连接到数据库(PS:SQL Server 2005不支持mssql.dll连接,因此,使用sqlsrv_query使用($ Conn)、SET NAMES GB2312);设置编码格式的报表数据库,SQL语句写道:插入意见(内容)值('aaa中国内容);
运行这个SQL语句,发现执行不成功,和sqlsrv_errors()函数用于输出的错误信息,并取得了以下结果:
复制代码代码如下所示:
阵列({ 0 } = >阵列({ 0 } = { } = > >系统定制系统{ 1 } = > 46 {代码} = > 46 { 2 } = >发生错误翻译查询字符串:双美居发现ucirc UTF-16 Unicode;Kui。{消息} = >一夔妾错误翻译查询字符串:双美居发现ucirc UTF-16 Unicode;Kui concubine Kui))。
这是网页上显示的结果,与原状复制。它可以从一个错误发生翻译查询字符串UTF-16有字符编码转换的问题。所以我用PHP iconv函数强行编码的中文,然后执行SQL语句。代码如下:
复制代码代码如下所示:
$字符串iconv('utf-8 ','gb2312 / /忽略,'aaa中文内容);
$插入视图(内容)值($字符串);
{代码}
此时,错误的信息被报告,错误的信息如下:
{代码}
阵列({ 0 } =阵列({ 0 } = { } = > > 42s22 SQLSTATE 42s22 { 1 } = { } = > > 207码207 { 2 } {微软} { 10 } { SQLServerNativeClient SQL Server } = 'AAA' {消息} = > {微软} { SQL Server本地客户的10 } { } 'AAA' SQL Server))。
这个错误信息看不到什么线程,我也把SQL语句放在页面上看SQL语句是否写错了,输出结果如下:
复制代码代码如下所示:
插入到意见(内容)值(AAA)
乍一看,似乎没有问题。事实上,有一个问题。我注意到后面的括号应该用引号括起来,这意味着它是一个字符串。所以我修改了SQL语句。
复制代码代码如下所示:
插入视图(内容)值。看到我的放大点
$字符串包含单引号,在此之后SQL语句的执行是成功的,而存储在数据库中的中文没有随机代码。