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

meg*_*oid 31 php

我正在尝试使用PHP查询来连接和提取MSSQL EXPRESS(2008 R2)数据库中的数据.但是当我从数据库中提取基于ntext的数据时,我收到了一个错误.

错误是;

仅限Unicode的归类或ntext数据中的Unicode数据无法使用DB-Library(例如ISQL)或ODBC 3.7或更早版本发送到客户端.(严重程度16)in

我的剧本是

    $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); 
Run Code Online (Sandbox Code Playgroud)

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

谢谢 ....

Phi*_*hil 59

手册页上的评论中有几个选项mssql_query()

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

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

  • 第二种方法对我来说很合适,但对我来说这太神奇了."将/etc/freetds.conf中的版本从4.2升级到8.0(如果PHP服务器是*nix)" (3认同)
  • 哇男人你真棒!它完美地工作!摇滚男人!!!!!!! (2认同)
  • CAST(field1 AS TEXT)AS field1 (2认同)
  • 8.0 技巧很奇怪……对我也有用。谢谢!注意我的 freetds conf 文件实际上在 /etc/freetds/freetds.conf (2认同)

小智 51

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

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

    apt-get install php5-sybase

  2. 当您收到此错误消息时:"无法使用DB-Library(例如ISQL)或ODBC 3.7或更早版本,无法将仅使用Unicode的归类或ntext数据中的Unicode数据发送到客户端."

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

    [global]
    ;tds version = 4.2
    tds version = 8.0
    client charset = UTF-8
    
    Run Code Online (Sandbox Code Playgroud)

    您也可以在php.ini中编辑"charset"(但如果您以前在freetds.conf中执行过此操作则不需要):指定客户端字符集..; 如果为空或未设置,则使用来自freetds.comf的客户端字符集; 这仅在使用FreeTDS编译时使用

    mssql.charset = "UTF-8"
    
    Run Code Online (Sandbox Code Playgroud)
  3. 如果需要unicode支持,请使用nchar/nvarchar/ntext列类型.


小智 7

就我而言,我需要安装:

sudo apt-get install php-sybase
Run Code Online (Sandbox Code Playgroud)

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

...
[global]
    # TDS protocol version
;   tds version = 4.2
tds version = 8.0
client charset = UTF-8
...
Run Code Online (Sandbox Code Playgroud)