Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Recupera a próxima linha de dados como objeto PHP.
Syntax
sqlsrv_fetch_object( resource $stmt [, string $className [, array $ctorParams[, row[, ]offset]]])
Parâmetros
$stmt: Um recurso de instrução correspondente a uma instrução executada.
$className [OPCIONAL]: Uma cadeia que especifica o nome da classe a instanciar. Se não for especificado um valor para o parâmetro $className , é instanciada uma instância da stdClass PHP.
$ctorParams [OPCIONAL]: Um array que contém valores passados ao construtor da classe especificada com o parâmetro $className . Se o construtor da classe especificada aceitar valores de parâmetro, o parâmetro $ctorParams deve ser usado ao chamar sqlsrv_fetch_object.
linha [OPCIONAL]: Um dos seguintes valores, especificando a linha a aceder num conjunto de resultados que utiliza um cursor deslizável. (Se a linha for especificada, $className e $ctorParams devem ser explicitamente especificados, mesmo que seja necessário especificar nulo para $className e $ctorParams.)
SQLSRV_SCROLL_NEXT
SQLSRV_SCROLL_PRIOR
SQLSRV_SCROLL_FIRST
SQLSRV_SCROLL_LAST
SQLSRV_SCROLL_ABSOLUTE
SQLSRV_SCROLL_RELATIVE
Para mais informações sobre estes valores, consulte Especificar um Tipo de Cursor e Selecionar Linhas.
deslocamento [OPCIONAL]: Usado com SQLSRV_SCROLL_ABSOLUTE e SQLSRV_SCROLL_RELATIVE para especificar a linha a recuperar. O primeiro registo no conjunto de resultados é 0.
Valor de retorno
Um objeto PHP com propriedades que correspondem a nomes de conjuntos de resultados. Os valores das propriedades são preenchidos com os valores correspondentes do conjunto de resultados. Se a classe especificada com o parâmetro $className opcional não existir ou se não houver um conjunto de resultados ativo associado à instrução especificada, o false é devolvido. Se não houver mais linhas para recuperar, o null é devolvido.
O tipo de dado de um valor no objeto devolvido será o tipo de dado PHP predefinido. Para informações sobre os tipos de dados PHP predefinidos, consulte Tipos de Dados PHP Padrão.
Observações
Se o nome de uma classe for especificado com o parâmetro opcional $className , um objeto deste tipo de classe é instanciado. Se a classe tiver propriedades cujos nomes correspondem aos nomes dos campos do conjunto de resultados, os valores correspondentes do conjunto de resultados são aplicados às propriedades. Se o nome do campo do conjunto de resultados não corresponder a uma propriedade de classe, uma propriedade com o nome do campo do conjunto de resultados é adicionada ao objeto e o valor do conjunto de resultados é aplicado à propriedade.
Aplicam-se as seguintes regras ao especificar uma classe com o parâmetro $className :
A correspondência é sensível a maiúsculas e minúsculas. Por exemplo, o nome da propriedade CustomerId não corresponde ao nome do campo CustomerID. Neste caso, uma propriedade CustomerID seria adicionada ao objeto e o valor do campo CustomerID seria atribuído à propriedade CustomerID.
A correspondência ocorre independentemente dos modificadores de acesso. Por exemplo, se a classe especificada tiver uma propriedade privada cujo nome corresponde ao nome do campo do conjunto de resultados, o valor do campo do conjunto de resultados é aplicado à propriedade.
Os tipos de dados de propriedade de classe são ignorados. Se o campo "CustomerID" no conjunto de resultados for uma string mas a propriedade "CustomerID" da classe for um inteiro, o valor da string do conjunto de resultados é escrito na propriedade "CustomerID".
Se a classe especificada não existir, a função retorna false e adiciona um erro à coleção de erros. Para informações sobre a obtenção de informações de erro, consulte sqlsrv_errors.
Se um campo sem nome for devolvido, sqlsrv_fetch_object irá descartar o valor do campo e emitir um aviso. Por exemplo, considere esta Transact-SQL instrução que insere um valor numa tabela de base de dados e recupera a chave primária gerada pelo servidor:
INSERT INTO Production.ProductPhoto (LargePhoto) VALUES (?);
SELECT SCOPE_IDENTITY()
Se os resultados devolvidos por esta consulta forem recuperados com sqlsrv_fetch_object, o valor devolvido por SELECT SCOPE_IDENTITY() será descartado e será emitido um aviso. Para evitar isto, pode especificar um nome para o campo devolvido na instrução Transact-SQL. Segue-se uma forma de especificar o nome de uma coluna no Transact-SQL:
SELECT SCOPE_IDENTITY() AS PictureID
Exemplo de objeto
O exemplo seguinte recupera cada linha de um conjunto de resultados como um objeto PHP. O exemplo assume que o SQL Server e a base de dados AdventureWorks estão instalados no computador local. Toda a saída é escrita para a consola quando o exemplo é executado a partir da linha de comandos.
<?php
/* Connect to the local server using Windows Authentication and
specify the AdventureWorks database as the database in use. */
$serverName = "(local)";
$connectionInfo = array( "Database"=>"AdventureWorks");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false )
{
echo "Could not connect.\n";
die( print_r( sqlsrv_errors(), true));
}
/* Set up and execute the query. */
$tsql = "SELECT FirstName, LastName
FROM Person.Contact
WHERE LastName='Alan'";
$stmt = sqlsrv_query( $conn, $tsql);
if( $stmt === false )
{
echo "Error in query preparation/execution.\n";
die( print_r( sqlsrv_errors(), true));
}
/* Retrieve each row as a PHP object and display the results.*/
while( $obj = sqlsrv_fetch_object( $stmt))
{
echo $obj->LastName.", ".$obj->FirstName."\n";
}
/* Free statement and connection resources. */
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);
?>
Exemplo de classe
O exemplo seguinte recupera cada linha de um conjunto de resultados como uma instância da classe Product definida no script. O exemplo recupera informações de produto das tabelas Compração.CompraEncomendaDetalhe e Produção.Produto da base de dados AdventureWorks para produtos que têm uma data de vencimento especificada (Data de Vencimento) e uma quantidade armazenada (StockQty) inferior a um valor especificado. O exemplo destaca algumas das regras que se aplicam ao especificar uma classe numa chamada para sqlsrv_fetch_object:
A variável $product é uma instância da classe Produto , porque "Produto" foi especificado com o parâmetro $className e a classe Produto existe.
A propriedade Nome é adicionada à instância $product porque a propriedade de nome existente não corresponde.
A propriedade Color é adicionada à instância $product porque não existe uma propriedade de correspondência.
A propriedade privada UnitPrice é preenchida com o valor do campo UnitPrice .
O exemplo assume que o SQL Server e a base de dados AdventureWorks estão instalados no computador local. Toda a saída é escrita para a consola quando o exemplo é executado a partir da linha de comandos.
<?php
/* Define the Product class. */
class Product
{
/* Constructor */
public function Product($ID)
{
$this->objID = $ID;
}
public $objID;
public $name;
public $StockedQty;
public $SafetyStockLevel;
private $UnitPrice;
function getPrice()
{
return $this->UnitPrice;
}
}
/* Connect to the local server using Windows Authentication, and
specify the AdventureWorks database as the database in use. */
$serverName = "(local)";
$connectionInfo = array( "Database"=>"AdventureWorks");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false )
{
echo "Could not connect.\n";
die( print_r( sqlsrv_errors(), true));
}
/* Define the query. */
$tsql = "SELECT Name,
SafetyStockLevel,
StockedQty,
UnitPrice,
Color
FROM Purchasing.PurchaseOrderDetail AS pdo
JOIN Production.Product AS p
ON pdo.ProductID = p.ProductID
WHERE pdo.StockedQty < ?
AND pdo.DueDate= ?";
/* Set the parameter values. */
$params = array(3, '2002-01-29');
/* Execute the query. */
$stmt = sqlsrv_query( $conn, $tsql, $params);
if ( $stmt )
{
echo "Statement executed.\n";
}
else
{
echo "Error in statement execution.\n";
die( print_r( sqlsrv_errors(), true));
}
/* Iterate through the result set, printing a row of data upon each
iteration. Note the following:
1) $product is an instance of the Product class.
2) The $ctorParams parameter is required in the call to
sqlsrv_fetch_object, because the Product class constructor is
explicitly defined and requires parameter values.
3) The "Name" property is added to the $product instance because
the existing "name" property does not match.
4) The "Color" property is added to the $product instance
because there is no matching property.
5) The private property "UnitPrice" is populated with the value
of the "UnitPrice" field.*/
$i=0; //Used as the $objID in the Product class constructor.
while( $product = sqlsrv_fetch_object( $stmt, "Product", array($i)))
{
echo "Object ID: ".$product->objID."\n";
echo "Product Name: ".$product->Name."\n";
echo "Stocked Qty: ".$product->StockedQty."\n";
echo "Safety Stock Level: ".$product->SafetyStockLevel."\n";
echo "Product Color: ".$product->Color."\n";
echo "Unit Price: ".$product->getPrice()."\n";
echo "-----------------\n";
$i++;
}
/* Free statement and connection resources. */
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);
?>
A função sqlsrv_fetch_object devolve sempre os dados de acordo com os Tipos de Dados PHP Padrão. Para informações sobre como especificar o tipo de dado PHP, veja Como: Especificar Tipos de Dados PHP.
Se um campo sem nome for devolvido, sqlsrv_fetch_object irá descartar o valor do campo e emitir um aviso. Por exemplo, considere esta Transact-SQL instrução que insere um valor numa tabela de base de dados e recupera a chave primária gerada pelo servidor:
INSERT INTO Production.ProductPhoto (LargePhoto) VALUES (?);
SELECT SCOPE_IDENTITY()
Se os resultados devolvidos por esta consulta forem recuperados com sqlsrv_fetch_object, o valor devolvido por SELECT SCOPE_IDENTITY() será descartado e será emitido um aviso. Para evitar isto, pode especificar um nome para o campo devolvido na instrução Transact-SQL. Segue-se uma forma de especificar o nome de uma coluna no Transact-SQL:
SELECT SCOPE_IDENTITY() AS PictureID