Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Hämtar nästa datarad som ett PHP-objekt.
Syntax
sqlsrv_fetch_object( resource $stmt [, string $className [, array $ctorParams[, row[, ]offset]]])
Parameters
$stmt: En satsresurs som motsvarar en exekverad sats.
$className [VALFRI]: En sträng som specificerar namnet på klassen som ska instansieras. Om ett värde för parametern $className inte specificeras, instansieras en instans av PHP stdClass .
$ctorParams [VALFRI]: En array som innehåller värden som skickas till konstruktören av den klass som specificerats med parametern $className . Om konstruktören av den specificerade klassen accepterar parametervärden måste $ctorParams-parametern användas vid anrop sqlsrv_fetch_object.
rad [VALFRI]: Ett av följande värden, som specificerar raden som ska nås i en resultatuppsättning som använder en rullbar markör. (Om rad anges måste $className och $ctorParams anges uttryckligen, även om du måste ange null för $className och $ctorParams.)
SQLSRV_SCROLL_NEXT
SQLSRV_SCROLL_PRIOR
SQLSRV_SCROLL_FIRST
SQLSRV_SCROLL_LAST
SQLSRV_SCROLL_ABSOLUTE
SQLSRV_SCROLL_RELATIVE
För mer information om dessa värden, se Specificering av en markörtyp och Val av rader.
offset [VALFRI]: Används med SQLSRV_SCROLL_ABSOLUTE och SQLSRV_SCROLL_RELATIVE för att ange vilken rad som ska hämtas. Den första posten i resultatuppsättningen är 0.
Returvärde
Ett PHP-objekt med egenskaper som motsvarar resultatmängdsfältens namn. Egenskapsvärden fylls med motsvarande fältvärden för resultatmängden. Om klassen som specificerats med den valfria $className-parametern inte existerar eller om det inte finns någon aktiv resultatmängd kopplad till det angivna uttalandet, returneras falskt. Om det inte finns fler rader att hämta returneras null .
Datatypen för ett värde i det returnerade objektet kommer att vara standarddatatypen för PHP. För information om standard PHP-datatyper, se Default PHP Data Types.
Remarks
Om ett klassnamn anges med den valfria parametern $className , instansieras ett objekt av denna klasstyp. Om klassen har egenskaper vars namn matchar fältnamnen i resultatmängden, tillämpas motsvarande resultatmängdsvärden på egenskaperna. Om ett resultatmängdsfältnamn inte matchar en klassegenskap, läggs en egenskap med resultatmängdens fältnamn till objektet och resultatmängdsvärdet appliceras på egenskapen.
Följande regler gäller när man specificerar en klass med parametern $className :
Matchning är skiftlägeskänslig. Till exempel matchar inte egenskapsnamnet CustomerId fältnamnet CustomerID. I detta fall skulle en egenskap CustomerID läggas till objektet och värdet av fältet CustomerID skulle ges till egenskapen CustomerID.
Matchning sker oavsett åtkomstmodifierare. Till exempel, om den specificerade klassen har en privat egenskap vars namn matchar ett fältnamn på en resultatmängd, tillämpas värdet från resultatmängdsfältet på egenskapen.
Klassegenskapsdatatyper ignoreras. Om fältet "CustomerID" i resultatuppsättningen är en sträng men egenskapen "CustomerID" för klassen är ett heltal, skrivs strängvärdet från resultatuppsättningen till egenskapen "CustomerID".
Om den specificerade klassen inte existerar returnerar funktionen false och lägger till ett fel i felsamlingen. För information om hur man hämtar felinformation, se sqlsrv_errors.
Om ett fält utan namn returneras kommer sqlsrv_fetch_object att kassera fältvärdet och utfärda en varning. Till exempel, betrakta denna Transact-SQL-sats som infogar ett värde i en databastabell och hämtar den servergenererade primärnyckeln:
INSERT INTO Production.ProductPhoto (LargePhoto) VALUES (?);
SELECT SCOPE_IDENTITY()
Om resultaten som returneras av denna fråga hämtas med sqlsrv_fetch_object, kommer värdet som returneras av SELECT SCOPE_IDENTITY() att kasseras och en varning utfärdas. För att undvika detta kan du ange ett namn för det returnerade fältet i Transact-SQL-satsen. Följande är ett sätt att ange ett kolumnnamn i Transact-SQL:
SELECT SCOPE_IDENTITY() AS PictureID
Objektexempel
Följande exempel hämtar varje rad i en resultatmängd som ett PHP-objekt. Exemplet antar att SQL Server och AdventureWorks-databasen är installerade på den lokala datorn. Alla utdata skrivs till konsolen när exemplet körs från kommandoraden.
<?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);
?>
Klassexempel
Följande exempel hämtar varje rad i en resultatmängd som en instans av den produktklass som definieras i skriptet. Exemplet hämtar produktinformation från tabellerna Purchasing.PurchaseOrderDetail och Production.Product i AdventureWorks-databasen för produkter som har ett angivet förfallodatum (Due Date) och en lagrad mängd (StockQty) som är mindre än ett angivet värde. Exemplet belyser några av reglerna som gäller när man specificerar en klass i ett anrop till sqlsrv_fetch_object:
Variabeln $product är en instans av Product-klassen, eftersom "Product" specificerades med parametern $className och Product-klassen existerar.
Namnegenskapen läggs till i den $product instansen eftersom den befintliga namnegenskapen inte matchar.
Color-egenskapen läggs till i $product instansen eftersom det inte finns någon matchande egenskap.
Den privata egendomen Enhetspris fylls med värdet av Enhetsprisfältet .
Exemplet förutsätter att SQL Server och AdventureWorks-databasen är installerade på den lokala datorn. Alla utdata skrivs till konsolen när exemplet körs från kommandoraden.
<?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);
?>
Funktionen sqlsrv_fetch_object returnerar alltid data enligt standarddatatyperna för PHP. För information om hur man specificerar PHP-datatypen, se Hur man: Specificera PHP-datatyper.
Om ett fält utan namn returneras kommer sqlsrv_fetch_object att kassera fältvärdet och utfärda en varning. Till exempel, betrakta denna Transact-SQL-sats som infogar ett värde i en databastabell och hämtar den servergenererade primärnyckeln:
INSERT INTO Production.ProductPhoto (LargePhoto) VALUES (?);
SELECT SCOPE_IDENTITY()
Om resultaten som returneras av denna fråga hämtas med sqlsrv_fetch_object, kommer värdet som returneras av SELECT SCOPE_IDENTITY() att kasseras och en varning utfärdas. För att undvika detta kan du ange ett namn för det returnerade fältet i Transact-SQL-satsen. Följande är ett sätt att ange ett kolumnnamn i Transact-SQL:
SELECT SCOPE_IDENTITY() AS PictureID