【问题标题】:MSSQL Query issue in PHP and querying text dataPHP中的MSSQL查询问题和查询文本数据
【发布时间】:2011-03-24 04:46:43
【问题描述】:

我正在尝试使用 PHP 进行查询以连接 MSSQL EXPRESS (2008 R2) 数据库并从中提取数据。但是当我从数据库中提取基于 ntext 的数据时出现错误。

错误是;

纯 Unicode 排序规则中的 Unicode 数据或 ntext 数据无法使用 DB-Library(例如 ISQL)或 ODBC 3.7 或更早版本发送到客户端。 (严重性 16)在

我的脚本是

    $myServer = ".\SQLEXPRESS";
    $myUser = "sa";
    $myPass = "blablabla";
    $myDB = "test"; 

    //connection to the database
    $dbhandle = mssql_connect($myServer, $myUser, $myPass)
      or die("Couldn't connect to SQL Server on $myServer"); 

    //select a database to work with
    $selected = mssql_select_db($myDB, $dbhandle)
      or die("Couldn't open database $myDB"); 

    //declare the SQL statement that will query the database
    $query = "SELECT * FROM dbo.table WHERE query='2'";
    //$query .= "FROM dbo.table  ";
    //$query .= "WHERE query='2'"; 

    //execute the SQL query and return records
    $result = mssql_query($query);

    $numRows = mssql_num_rows($result); 
    echo "<h1>" . $numRows . " Row" . ($numRows == 1 ? "" : "s") . " Returned </h1>"; 

    //display the results 
    while($row = mssql_fetch_array($result))
    {
      echo "<li>" . $row["query"]. "</li>";
    }
    //close the connection
    mssql_close($dbhandle); 

对此的任何帮助表示赞赏....

谢谢....

【问题讨论】:

    标签: php


    【解决方案1】:

    来自mssql_query() manual page 上的 cmets 的几个选项

    • SELECT CAST(field1 AS TEXT) AS field1 FROM table
    • /etc/freetds.conf中的版本从4.2更改为8.0(如果PHP服务器是*nix)
    • 避免SELECT * 查询

    如果您在该页面上搜索 ntext,还有更多内容。

    【讨论】:

    • CAST(field1 AS TEXT) AS field1
    • 第二种方法对我来说很合适,但它太神奇了,我无法理解。 "将 /etc/freetds.conf 中的版本从 4.2 更改为 8.0 (如果 PHP 服务器是 *nix)"
    • 8.0 的技巧很奇怪……对我也有用。谢谢!请注意,我的 freetds conf 文件实际上位于 /etc/freetds/freetds.conf
    • 根据 FreeTds 文档,v 8 是 SQL Server 2000 的 7.1 的别名,非常旧。可能您应该使用 7.4,然后根据需要修复您的查询。 freetds.org/userguide/choosingtdsprotocol.htm
    【解决方案2】:

    您可能需要了解以下几点:

    1. 为 Debian 安装 mssql 支持(Lenny/Squeeze):

      apt-get 安装 php5-sybase

    2. 当您收到此错误消息时: “仅 Unicode 排序规则中的 Unicode 数据或 ntext 数据无法使用以下方式发送到客户端 DB-Library(例如 ISQL)或 ODBC 版本 3.7 或更早版本。”

      在 /etc/freetds/freetds.conf 添加这两行(最后两行):

      [global]
      ;tds version = 4.2
      tds version = 8.0
      client charset = UTF-8
      

      您也可以在 php.ini 中编辑“charset”(但如果您之前在 freetds.conf): ;指定客户端字符集.. ;如果为空或未设置,则使用来自 freetds.comf 的客户端字符集 ;这仅在使用 FreeTDS 编译时使用

      mssql.charset = "UTF-8"
      
    3. 如果您需要 unicode 支持,请使用 nchar/nvarchar/ntext 列类型。

    【讨论】:

    • 你救了我,因为我无法访问 PHP 应用程序。
    • 谢谢!你确实帮了我很多。
    • 我正在使用 python,但遇到了同样的问题——这个解决方案也很适合。谢谢!
    【解决方案3】:

    就我而言,我需要安装:

    sudo apt-get install php-sybase
    

    并修改/etc/freetds.conf文件:

    ...
    [global]
        # TDS protocol version
    ;   tds version = 4.2
    tds version = 8.0
    client charset = UTF-8
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-03
      • 1970-01-01
      • 2012-03-20
      相关资源
      最近更新 更多