2012-05-04 2 views
2

Я не могу получить прямой ответ на это.Идентификатор ресурса nvarchar (MAX)

Я извлекаю содержимое поля типа nvarchar (MAX) в базе данных SQLSRV, однако я продолжаю получать «Идентификатор ресурса № 1», когда я эхо возвращаю результат поля, возвращаемого из запроса, а не содержимого , Я довольно новичок в SQLSRV и PHP, но из того, что я понимаю, является это значение указателем на другое место, где фактическое содержимое, в котором я нуждаюсь?

Если да, то как мне добраться до этих данных.

Я попытался:

$sql = "SELECT * FROM table"; 
    $stmt= sqlsrv_query($conn, $sql, array(), array("Scrollable" => SQLSRV_CURSOR_STATIC)); 

$getNext = sqlsrv_fetch($stmt); 
$result = sqlsrv_get_field($stmt, 1); // this is the nvarchar(max) field 

echo $result; // this shows Resource id #1; 

// I tried 
//$resource = sqlsrv_fetch($result); // this creates errors 

Спасибо.

ответ

1

NVARCHAR (MAX) будет обрабатывать проблемы хранения для вас, сохраняя в таблице что-либо менее 4000 символов в таблице, но что-то большее в отдельном месте с указателем в таблице. Хорошей новостью является то, что SQL Server возвращает данные, возвращенные вам, как если бы они были сохранены в таблице, поэтому использование NVARCHAR (MAX) не должно быть причиной вашей проблемы, оно просто работает как обычное поле таблицы.

Просто нашел это, может помочь ...

/*Get the second field of the row as a stream. 
Because the default return type for a nvarchar field is a 
string, the return type must be specified as a stream. */ 
$stream = sqlsrv_get_field($stmt, 1, 
          SQLSRV_PHPTYPE_STREAM(SQLSRV_ENC_CHAR)); 
while(!feof($stream)) 
{ 
    $str = fread($stream, 10000); 
    echo $str; 
} 

http://msdn.microsoft.com/en-us/library/cc296207(v=sql.105).aspx

+0

Так как я могу получить содержимое вместо "Resource ID # 1"? –

+0

Вы уверены, что поле nvarchar (max) является индексом 1? sqlsrv_get_field имеет нулевое значение. –

+0

Это то, что отображается, когда я повторяю содержимое этого поля. –