MSSQL: не могу заселектить текстовое поле

trasherz

Новичок
MSSQL: не могу заселектить текстовое поле

При использованиии следующего запроса:
PHP:
$result=mssql_query("
        select id, ath_id
        from table");
Все окей.
Когда же я пытаюсь заселектить ещё одно поле:
PHP:
$result=mssql_query("
        select id, ath_id, ath_name
        from table");
Скрипт не грузится. Ошибок не выдает.
Так он себя ведет всегда, когда я пытаюсь заселектить поле, содержащее текст.
Подскажите, в чем проблема?
 

zarus

Хитрожопый макак
ID - это зарезервированное слово.
И вообще, в MSSQL названия таблиц и полей таблиц надо заключать в [], чтобы избежать недоразумений.
Код:
SELECT
  [id], 
  [ath_id],
  [ath_name]
FROM 
  [table]
Скрипт не грузится. Ошибок не выдает.
Так он себя ведет всегда, когда я пытаюсь заселектить поле, содержащее текст.
Это ты сам додумал, или тебе об этом сказали.
Вот этот код в начале скрипта
PHP:
ini_set( 'display_errors', 1 );
error_reporting( E_ALL | E_STRICT );
поможет тебе найти ошибку вкупе с
PHP:
$result = mssql_query( "..." ) or die( mssql_get_last_message () );
 

trasherz

Новичок
Использую ODBTP.
Запускаю следующий скрипт:
PHP:
<?php

    $con = odbtp_connect( 'localhost',
                          'DRIVER={SQL Server};SERVER=localhost;UID=user;PWD=pass;DATABASE=server;' ) or die;
odbtp_set_attr( ODB_ATTR_UNICODESQL, TRUE, $con );
    odbtp_set_attr( ODB_ATTR_FULLCOLINFO, TRUE );
odbtp_use_row_cache($con,  FALSE,  0);
    $qry = odbtp_query("        select *
        from server
") or die;

    do {
        if( ($msg = odbtp_get_message( $qry )) ) {
            echo "MESSAGE: $msg<p>";
            continue;
        }
        if( ($cols = odbtp_num_fields( $qry )) == 0 ) {
            echo odbtp_affected_rows( $qry );
            echo " rows affected<p>\n";
            continue;
        }
        echo "<table cellpadding=2 cellspacing=0 border=1>\n";
        echo "<tr>";
        for( $col = 0; $col < $cols; $col++ ) {
            echo "<td><nobr> " . odbtp_field_name( $qry, $col );
            echo " (" . odbtp_field_type( $qry, $col ) . ") </nobr></td>";
            if( odbtp_field_bindtype( $qry, $col ) == ODB_DATETIME )
                odbtp_bind_field( $qry, $col, ODB_CHAR );
        }
        echo "</tr>\n";

        while( ($rec = odbtp_fetch_array($qry)) ) {
            echo "<tr>";
            for( $col = 0; $col < $cols; $col++ ) {
                if( is_null( $rec[$col] ) ) $rec[$col] = "NULL";
                echo "<td><nobr> $rec[$col] </nobr></td>";
            }
            echo "</tr>\n";
        }
        echo "</table><p>\n";

        echo odbtp_affected_rows( $qry );
        echo " rows affected<p>\n";
    }
    while( odbtp_next_result( $qry ) );

    odbtp_close();
?>
Получаю табличку, все поля выбираются нормально, а вот те, в которых текст -- NULL.
Тип проблемных полей - nvarchar, varchar.
В конфиге ODBTP стоит:
Код:
use row cache = no
Пробовал поставить
Код:
use row cache = yes
но тогда скрипт не грузится.. никакой информаци не выдает :(

Пожуйлста, помогите разобраться..

p.s. юзаю ODBTP из-за того, что php_mssql.dll под x64 вроде бы и нет..
 
Сверху