2011-03-24 6 views
29

Estoy intentando una consulta en PHP para conectar y extraer datos de una base de datos MSSQL EXPRESS (2008 R2). Pero recibo un error cuando estoy extrayendo datos basados ​​en ntext de la base de datos.MSSQL Problema de consulta en PHP y consulta de datos de texto

El error es;

Los datos Unicode en una intercalación Unicode-only o datos ntext no se pueden enviar a los clientes que utilizan DB-Library (como ISQL) u ODBC versión 3.7 o anterior. (16 de gravedad) en

y mi guión es

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

cualquier ayuda en esto se agradece ....

Gracias ....

Respuesta

50

par de opciones de la comentarios sobre el mssql_query()manual page

  • SELECT CAST(field1 AS TEXT) AS field1 FROM table
  • Chang la versión en /etc/freetds.conf 4,2-8,0 (si el servidor PHP es * nix)
  • Evitar SELECT * consultas

Mucho más si se busca ntext en esa página.

+2

aww man you are awesome !!! funciona perfectamente !!! rock en hombre !!!!!!! – megazoid

+0

@megazoid ¿Qué método funcionó para usted (para la posteridad)? – Phil

+2

CAST (campo1 COMO TEXTO) COMO campo1 – megazoid

38

Aquí hay algunas cosas que pueda necesitar saber:

  1. instalar el soporte mssql para Debian (Lenny/Reducir):

    apt-get install php5-Sybase

  2. Cuando Obtuve este mensaje de error: "Los datos Unicode en una intercalación Unicode-only o los datos ntext no se pueden enviar a los clientes que usan DB-Library (como ISQL) u ODBC versión 3.7 o anterior."

    En /etc/freetds/freetds.conf añadir estas dos líneas (dos últimos):

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

    Puede editar "charset" en php.ini también (pero no es necesario si lo hizo anteriormente en freetds.conf): ; Especifique el conjunto de caracteres del cliente ... ; Si está vacío o no configurado, se usa el juego de caracteres del cliente de freetds.comf ; Esto sólo se utiliza cuando se compila con FreeTDS

    mssql.charset = "UTF-8" 
    
  3. utilizar tipos/nvarchar/ntext columna nchar si necesita soporte Unicode.

+0

Me salvaste porque no tenía acceso a la aplicación PHP. – Edenshaw

+0

¡Gracias! Me ayudaste mucho. –

2

En mi caso, tenía que instalar:

sudo apt-get install php-sybase 

y modificar el/etc/freetds.archivo de conf:

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