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

时间:2011-03-24 04:46:43

标签: php

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

错误是;

  

无法使用DB-Library(例如ISQL)或ODBC 3.7或更早版本将Unicode数据中的Unicode数据或ntext数据发送到客户端。 <严重性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); 

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

谢谢....

3 个答案:

答案 0 :(得分:58)

mssql_query() manual page

上的评论中的几个选项
  • SELECT CAST(field1 AS TEXT) AS field1 FROM table
  • /etc/freetds.conf中的版本从4.2升级到8.0(如果PHP服务器是* nix)
  • 避免SELECT *次查询

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

答案 1 :(得分:49)

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

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

    apt-get install php5-sybase

  2. 收到此错误消息时: “仅使用Unicode的归类或ntext数据中的Unicode数据无法发送给客户端 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列类型。

答案 2 :(得分:5)

就我而言,我需要安装:

$('.gallery-info').each(function() {
  var descLength = 140;
  var str = $(this).text();
  var patt = new RegExp(/[,;.:!()&\s$]/g);

  if (str.length > descLength) {
   $(this).text(str.substr(0, descLength) + "...");
  } 
});

修改/etc/freetds.conf文件:

sudo apt-get install php-sybase