PHP 中的 MSSQL 查询问题和查询文本数据

php
2022-08-30 14:03:44

我正在尝试在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); 

对此的任何帮助都是值得赞赏的....

谢谢。。。。


答案 1

手册页上注释中的几个选项mssql_query()

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

如果您在该页面上搜索,则更多。ntext


答案 2

以下是您可能需要了解的一些事项:

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

    apt-get install php5-sybase

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

    在 /etc/freetds/freetds.conf 中添加以下两行(最后两行):

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

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

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


推荐