2

我似乎无法得到一个直接的答案。

我正在获取 SQLSRV 数据库中类型为 nvarchar(MAX) 的字段的内容,但是当我回显从查询返回的字段结果而不是内容时,我不断收到“资源 ID #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

谢谢你。

4

1 回答 1

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

于 2012-05-04T14:39:06.090 回答