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

PHP中的MSSQL查询问题与文本数据查询,php,Php,我正在尝试用PHP进行查询,以连接MSSQL EXPRESS(2008 R2)数据库并从中提取数据。但是,当我从数据库中提取基于ntext的数据时,出现了一个错误 错误是 只能使用Unicode排序规则或ntext数据中的Unicode数据不能发送到使用DB Library(如ISQL)或ODBC版本3.7或更早版本的客户端。(严重程度16)英寸 我的剧本是 $myServer = ".\SQLEXPRESS"; $myUser = "sa"; $myPass = "bl

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

错误是

只能使用Unicode排序规则或ntext数据中的Unicode数据不能发送到使用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); 
$myServer=“.\SQLEXPRESS”;
$myUser=“sa”;
$myPass=“blabla”;
$myDB=“测试”;
//与数据库的连接
$dbhandle=mssql\u connect($myServer、$myUser、$myPass)
或者死亡(“无法连接到$myServer上的SQL Server”);
//选择要使用的数据库
$selected=mssql\u select\u db($myDB,$dbhandle)
或者死亡(“无法打开数据库$myDB”);
//声明将查询数据库的SQL语句
$query=“从dbo.table中选择*,其中query='2';
//$query.=“FROM dbo.table”;
//$query.=“WHERE query='2'”;
//执行SQL查询并返回记录
$result=mssql_查询($query);
$numRows=mssql\u num\u行($result);
“回声”$努姆罗斯。“行”。($numRows==1?“:“s”)。“返回”;
//显示结果
while($row=mssql\u fetch\u数组($result))
{
回显“
  • ”$row[“query”]。“
  • ”; } //关闭连接 mssql_关闭($dbhandle);
    在此方面的任何帮助都将不胜感激


    谢谢……

    mssql\u query()上的注释中的两个选项

    • 从表中选择CAST(字段1作为文本)作为字段1
    • /etc/freetds.conf
      中的版本从4.2更改为8.0(如果PHP服务器是*nix)
    • 避免
      选择*
      查询

    如果您在该页面上搜索
    ntext
    ,将获得更多信息。

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

  • 为Debian安装mssql支持(Lenny/Squence):

    apt get安装php5 sybase

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

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

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

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


  • 就我而言,我需要安装:

    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
    ...
    

    第二种方法很适合我,但它太神奇了,我无法理解。“将/etc/freetds.conf中的版本从4.2更改为8.0(如果PHP服务器是*nix)”8.0技巧很奇怪……对我来说也很有用。谢谢请注意,我的freetds conf文件实际上位于/etc/freetds/freetds.conf中,根据freetds docs v 8是SQL Server 2000的7.1的别名,非常旧。可能您应该使用7.4,然后根据需要修复查询。你救了我,因为我没有访问PHP应用程序的权限。谢谢!你确实帮了我很多。我正在使用python,但遇到了同样的问题——这个解决方案在这方面也非常有效。谢谢
    ...
    [global]
        # TDS protocol version
    ;   tds version = 4.2
    tds version = 8.0
    client charset = UTF-8
    ...