Home » Php » MSSQL Query issue in PHP and querying text data

MSSQL Query issue in PHP and querying text data

Posted by: admin April 23, 2020 Leave a comment

Questions:

I’m trying a query in PHP to connect and extract data from a MSSQL EXPRESS (2008 R2) database. But i’m getting an error when i’m pulling ntext based data from the DB.

Error is;

Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier. (severity 16) in

and my script is

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

any help on this is appreciated ….

Thanks ….

How to&Answers:

Couple of options from the comments on the mssql_query() manual page

  • SELECT CAST(field1 AS TEXT) AS field1 FROM table
  • Chang the version in /etc/freetds.conf from 4.2 to 8.0 (if the PHP server is *nix)
  • Avoid SELECT * queries

Plenty more if you search ntext on that page.

Answer:

Here are some things you might need to know:

  1. Install mssql support for Debian (Lenny/Squeeze):

    apt-get install php5-sybase

  2. When you got this error message:
    “Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using
    DB-Library (such as ISQL) or ODBC version 3.7 or earlier.”

    In /etc/freetds/freetds.conf add these two lines (last two):

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

    You can edit “charset” in php.ini too (but you don’t need if you did it previously in
    freetds.conf):
    ; Specify client character set..
    ; If empty or not set the client charset from freetds.comf is used
    ; This is only used when compiled with FreeTDS

    mssql.charset = "UTF-8"
    
  3. Use nchar/nvarchar/ntext column types if you need unicode support.

Answer:

In my case, I needed to install:

sudo apt-get install php-sybase

And modify the /etc/freetds.conf file:

...
[global]
    # TDS protocol version
;   tds version = 4.2
tds version = 8.0
client charset = UTF-8
...