sqlsrv_fetch_object
데이터의 다음 행을 PHP 개체로 검색합니다.
구문
sqlsrv_fetch_object( resource $stmt [, string $className [, array $ctorParams[, row[, ]offset]]])
매개 변수
$stmt: 실행된 문에 해당하는 문 리소스입니다.
$className [OPTIONAL]: 인스턴스화할 클래스의 이름을 지정하는 문자열입니다. $className 매개 변수의 값을 지정하지 않으면 PHP stdClass의 인스턴스가 인스턴스화됩니다.
$ctorParams [OPTIONAL]: $className 매개 변수로 지정된 클래스의 생성자에 전달된 값을 포함하는 배열입니다. 지정된 클래스의 생성자가 매개 변수 값을 허용하는 경우 sqlsrv_fetch_object 호출할 때 $ctorParams 매개 변수를 사용해야 합니다.
행 [선택 사항]: 스크롤 가능한 커서를 사용하는 결과 집합에서 액세스할 행을 지정하는 다음 값 중 하나입니다. 행을 지정하는 경우 $className 및 $ctorParams 대해 null을 지정해야 하는 경우에도 $className 및 $ctorParams 명시적으로 지정해야 합니다.
SQLSRV_SCROLL_NEXT
SQLSRV_SCROLL_PRIOR
SQLSRV_SCROLL_FIRST
SQLSRV_SCROLL_LAST
SQLSRV_SCROLL_ABSOLUTE
SQLSRV_SCROLL_RELATIVE
이러한 값에 대한 자세한 내용은 커서 유형 지정 및 행 선택을 참조하세요.
offset [선택 사항]: 검색할 행을 지정하는 데 SQLSRV_SCROLL_ABSOLUTE 및 SQLSRV_SCROLL_RELATIVE와 함께 사용됩니다. 결과 집합의 첫 번째 레코드는 0입니다.
Return Value
결과 집합 필드 이름에 해당하는 속성이 있는 PHP 개체입니다. 속성 값은 해당 결과 집합 필드 값으로 채워집니다. 선택적 $className 매개 변수로 지정된 클래스가 없거나 지정된 문 과 연결된 활성 결과 집합이 없으면 false 가 반환됩니다. 검색 할 행이 더 이상 없으면 null 이 반환됩니다.
반환된 개체에 있는 값의 데이터 형식은 기본 PHP 데이터 형식입니다. 기본 PHP 데이터 형식에 대한 자세한 내용은 기본 PHP 데이터 형식을 참조 하세요.
설명
선택적 $className 매개 변수를 사용하여 클래스 이름을 지정하면 이 클래스 형식의 개체가 인스턴스화됩니다. 클래스에 이름이 결과 집합 필드 이름과 일치하는 속성이 있는 경우 해당 결과 집합 값이 속성에 적용됩니다. 결과 집합 필드 이름이 클래스 속성과 일치하지 않으면 결과 집합 필드 이름이 있는 속성이 개체에 추가되고 결과 집합 값이 속성에 적용됩니다.
다음 규칙은 $className 매개 변수로 클래스를 지정할 때 적용됩니다.
일치는 대/소문자를 구분합니다. 예를 들어 속성 이름 CustomerId가 필드 이름 CustomerID와 일치하지 않습니다. 이 경우 CustomerID 속성이 개체에 추가되고 CustomerID 필드의 값이 CustomerID 속성에 지정됩니다.
액세스 한정자에 관계없이 일치가 발생합니다. 예를 들어 지정된 클래스에 이름이 결과 집합 필드 이름과 일치하는 private 속성이 있는 경우 결과 집합 필드의 값이 속성에 적용됩니다.
클래스 속성 데이터 형식은 무시됩니다. 결과 집합의 "CustomerID" 필드가 문자열이지만 클래스의 "CustomerID" 속성이 정수이면 결과 집합의 문자열 값이 "CustomerID" 속성에 기록됩니다.
지정된 클래스가 없으면 함수는 false를 반환하고 오류 컬렉션에 오류를 추가합니다. 오류 정보를 검색하는 방법에 대한 자세한 내용은 sqlsrv_errors 참조하세요.
이름이 없는 필드가 반환 되면 sqlsrv_fetch_object 필드 값을 삭제하고 경고를 발생합니다. 예를 들어 데이터베이스 테이블에 값을 삽입하고 서버에서 생성된 기본 키를 검색하는 이 Transact-SQL 문을 고려합니다.
INSERT INTO Production.ProductPhoto (LargePhoto) VALUES (?);
SELECT SCOPE_IDENTITY()
이 쿼리에서 반환된 결과가 sqlsrv_fetch_object 함께 검색되면 반환된 SELECT SCOPE_IDENTITY()
값이 삭제되고 경고가 발생합니다. 이를 방지하려면 Transact-SQL 문에서 반환된 필드의 이름을 지정할 수 있습니다. 다음은 Transact-SQL에서 열 이름을 지정하는 한 가지 방법입니다.
SELECT SCOPE_IDENTITY() AS PictureID
개체 예제:
다음 예제에서는 결과 집합의 각 행을 PHP 개체로 검색합니다. 이 예제에서는 SQL Server 및 AdventureWorks 데이터베이스가 로컬 컴퓨터에 설치된 것으로 가정합니다. 모든 출력은 명령줄에서 예시가 실행될 때 콘솔에 기록됩니다.
<?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);
?>
클래스 예제
다음 예제는 결과 집합의 각 행을 스크립트에서 정의된 Product 클래스의 인스턴스로 검색합니다. 이 예제에서는 AdventureWorks 데이터베이스의 Purchase.PurchaseOrderDetail 및 Production.Product 테이블에서 지정된 기한(DueDate) 및 스톡Qty(StockQty)가 지정된 값보다 작은 제품에 대한 제품 정보를 검색합니다. 이 예제에서는 sqlsrv_fetch_object 호출에서 클래스를 지정할 때 적용되는 몇 가지 규칙을 강조 표시합니다.
$product 변수는 "Product"가 $className 매개 변수로 지정되고 Product 클래스가 존재하기 때문에 Product 클래스의 인스턴스입니다.
기존 이름 속성이 일치하지 않으므로 Name 속성이 $product 인스턴스에 추가됩니다.
일치하는 속성이 없으므로 Color 속성이 $product 인스턴스에 추가됩니다.
Private 속성 UnitPrice는 UnitPrice 필드의 값으로 채워집니다.
이 예시에서는 SQL Server 및 AdventureWorks 데이터베이스가 로컬 컴퓨터에 설치된 것으로 가정합니다. 모든 출력은 명령줄에서 예시가 실행될 때 콘솔에 기록됩니다.
<?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
explicity 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);
?>
sqlsrv_fetch_object 함수는 항상 기본 PHP 데이터 형식에 따라 데이터를 반환합니다. PHP 데이터 형식을 지정하는 방법에 대한 자세한 내용은 방법: PHP 데이터 형식 지정을 참조 하세요.
이름이 없는 필드가 반환 되면 sqlsrv_fetch_object 필드 값을 삭제하고 경고를 발생합니다. 예를 들어 데이터베이스 테이블에 값을 삽입하고 서버에서 생성된 기본 키를 검색하는 이 Transact-SQL 문을 고려합니다.
INSERT INTO Production.ProductPhoto (LargePhoto) VALUES (?);
SELECT SCOPE_IDENTITY()
이 쿼리에서 반환된 결과가 sqlsrv_fetch_object 함께 검색되면 반환된 SELECT SCOPE_IDENTITY()
값이 삭제되고 경고가 발생합니다. 이를 방지하려면 Transact-SQL 문에서 반환된 필드의 이름을 지정할 수 있습니다. 다음은 Transact-SQL에서 열 이름을 지정하는 한 가지 방법입니다.
SELECT SCOPE_IDENTITY() AS PictureID