2011-03-24 93 views
29

我試圖在PHP中查詢連接並從MSSQL EXPRESS(2008 R2)數據庫中提取數據。但是當我從數據庫中提取基於ntext的數據時,出現錯誤。PHP中的MSSQL查詢問題和查詢文本數據

錯誤是;

僅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); 

有這方面的幫助表示讚賞....

感謝....

回答

50

夫婦從選項上評論mssql_query()manual page

  • SELECT CAST(field1 AS TEXT) AS field1 FROM table
  • /etc/freetds.conf的版本從4.2到8.0(如果PHP服務器是* nix中)
  • 避免SELECT *查詢

。更多的,如果你在該網頁上搜索ntext

+2

aww man you are awesome !!!它完美的作品!搖滾男人!!!!!!! – megazoid 2011-03-24 05:09:15

+0

@megazoid哪種方法適合你(後代)? – Phil 2011-03-24 05:13:58

+2

CAST(field1 AS TEXT)AS field1 – megazoid 2011-03-24 05:26:58

38

以下是一些您可能需要知道的事情:

  1. 安裝爲Debian(倫尼/擠壓)MSSQL支持:

    的apt-get安裝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「字符集」太(但如果你沒有,你不需要它以前在 freetds.conf中): ;指定客戶端字符集.. ;如果爲空或未設置來自freetds.comf的客戶端字符集,則使用 ;這當freetds的

    mssql.charset = "UTF-8" 
    
  3. 使用的nchar/nvarchar的/ ntext列類型的編譯,如果你需要的Unicode支持時才使用。

+0

你救了我,因爲我沒有訪問PHP應用程序。 – Edenshaw 2015-10-28 16:46:08

+0

謝謝!你確實幫了我很多。 – 2017-09-25 18:46:42

2

就我而言,我需要安裝:

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