`
renzhen
  • 浏览: 247794 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

为PHP微软SQL Server驱动加入更好的ADODB支持

    博客分类:
  • PHP
阅读更多
  微软对PHP的支持力度很大,在IIS下加入了PHP支持,支持PHP访问.Net组件,更重要的是发布了原生的SQL Server驱动来帮助PHP程序使用SQL Server数据库做开发。
  公司的CRM产品使用PHP开发,使用ADODB统一数据库连接层,当初开发时,只支持MySQL一种数据库,后来,我通过PHP内置的MS SQL驱动来帮助系统支持SQL Server数据库,由于使用了ADODB,这个类库对于PHP内置的MS SQL驱动支持很好,而数据库函数相似度也很高,所以移植过程还算顺利,这个过程主要是对于系统中的一些不通用的sql语句进行修改,从而可以支持SQL Server数据库,其次就是改了分页函数的算法,支持SQL Server2005的ROWNUM函数,不过使用这个驱动的问题是对UTF-8的支持不佳,虽然CRM系统内部可以读取和写入中文,但是使用SQL Server Management Studio打开会发现里面都是乱码,对于某些企业而言,这是不可接受的,也不方便一些系统间的集成。
  当微软发布PHP原生的SQL Server驱动第一版时候,我就曾经想要使用这个驱动开发访问SQL Server数据库,来达到更好的对于SQL Server的支持,毕竟微软开发的东西更有保障,可是最终没有成功,不成功的原因很多,主要是:
  1. ADODB内对于PHP原生的SQL Server驱动支持不够,如果要使用它必须自己开发对应的内容,这个要耗费大量的时间。
  2. PHP原生的SQL Server驱动同样不支持UTF-8编码。
  3. 最后也是最重要的问题:关键函数和特性的缺失,包括num_rows函数和可滚动结果集的特性,而CRM系统却大量依赖这些特性,于是与系统无法保持兼容。
   最近看到了微软发布PHP原生的SQL Server驱动v1.1,里面看到对UTF-8编码和一些关键特性的支持,我知道是时候把MS SQL驱动换成微软PHP原生的SQL Server驱动了。
   但是ADODB内对于PHP原生的SQL Server驱动支持似乎只是v1.0,没有把v1.1中的特性包含在其中,于是我只能自己动手,丰衣足食了。其中主要改变如下:
   1. 在sqlsrv_connect加入charset参数,强制连接使用UTF-8编码。
   2. 在sqlsrv_query中加入了Scrollable选项,强制使用SQLSRV_CURSOR_KEYSET类型结果集(支持num_rows函数和随机访问)。
   3. 重写Move函数支持随机访问结果集。
   4. 。。。
   我将修改的文件上传上来,如果你要使用,可以将php文件放到ADODB目录下的drivers目录下即可。
0
3
分享到:
评论
1 楼 wwx840723 2014-09-03  
$db = ADONewConnection("mssqlnative");
$sql9 = "UPDATE table SET table_type=1 WHERE user_id=1";
$db->Execute($sql9);
为啥不执行修改呢?

相关推荐

Global site tag (gtag.js) - Google Analytics