Home mail me! Syndicate this site using RSS

Archive for TAG: MSSQL

Microsoft’s SQL Server 2005 driver for PHP

真可谓PHP界的福音啊,微软最近也在PHP上频频有所作为,先是之前针对IIS对FASTCGI的支持,现在是为PHP写了个MSSQL的扩展。

新扩展与现有的MSSQL扩展的区别如下:

  • SQL Server 2000以后的数据库支持varchar存放大于255个字节的数据,而现有的只支持255个字节
  • 现有的不支持nvarchar类型
  • 新扩展没有PDO的实现
  • 新扩展只能运行在WINDOWS平台
  • 新扩展不提供源代码,只有DLL文件
  • 新扩展支持data streams
  • 新扩展在PHPINFO里将显示sqlsrv support enabled
  • 更多信息请访问官方网站:http://www.microsoft.com/sql/technologies/php/default.mspx

    2 Comments »

    [老文章]PHP中查询SQL Server或Sybase时TEXT字段被截断的解决方案

    在CSDN的PHP版里老是看到有人问TEXT字段被截断的问题,偶也回答了无数次,今天索性就总结一下吧:

    一、针对MS SQL SERVER数据库

    有两种解决方案,如下:

    * 修改php.ini来实现:

    打开php.ini,可看到mssql.textsize,mssql.textlimit两个选项:

    ; Valid range 0 – 2147483647. Default = 4096.
    ;mssql.textlimit = 4096
    ; Valid range 0 – 2147483647. Default = 4096.
    ;mssql.textsize = 4096

    可以看到默认配置为4096字节,也就是经常碰到的被截断为4K,将之改为合适的大小,去掉前面的分号,然后保存并重起WEB服务器即可。

    从上面两个选项可看到范围为:0 – 2147483647字节,其实-1也可以的,查看一下PHP源代码即可发现-1表示无限制 :)
    if (MS_SQL_G(textlimit) != -1) {
    sprintf(buffer, “%li”, MS_SQL_G(textlimit));
    if (DBSETOPT(mssql.link, DBTEXTLIMIT, buffer)==FAIL) {
    efree(hashed_details);
    dbfreelogin(mssql.login);
    RETURN_FALSE;
    }
    }
    if (MS_SQL_G(textsize) != -1) {
    sprintf(buffer, “SET TEXTSIZE %li”, MS_SQL_G(textsize));
    dbcmd(mssql.link, buffer);
    dbsqlex ec(mssql.link);
    dbresults(mssql.link);
    }

    * 在PHP中查询之前执行SET TEXTSIZE 合适的大小:

    只需在SELECT之前执行

    mssql_query(“SET TEXTSIZE 65536″);

    从上面PHP源代码中可看到其实也是执行SET TEXTSIZE的 :)

    二、针对Sybase数据库

    由于该扩展在php.ini没有像SQL SERVER那样的选项可配置,所以只有采用上面的第二种方法,即:

    在SELECT之前执行

    sybase_query(“SET TEXTSIZE 65536″);

    9月24日补充:
    有不少朋友可能也碰到过使用varchar类型的字段时,只返回256个字符的问题。
    其实这也不是PHP的BUG,而是微软提供的客户端即library限制了而已。
    弥补方法是转为TEXT字段,或者采用SQL转,如下:
    SELECT CAST(myfield AS TEXT) AS myfield FROM table

    No Comments »