수색…


비고

SQLSRV 드라이버는 Microsoft SQL Server 및 SQL Azure 데이터베이스에 액세스 할 수있는 Microsoft 지원 PHP 확장입니다. 이것은 PHP 5.3에서 비추천되었으며 PHP 7에서 제거 된 MSSQL 드라이버의 대안입니다.


SQLSRV 확장은 다음 운영 체제에서 사용할 수 있습니다.

  • Windows Vista 서비스 팩 2 이상
  • Windows Server 2008 서비스 팩 2 이상
  • Windows Server 2008 R2
  • 윈도우 7

SQLSRV 확장을 사용하려면 PHP를 실행하는 컴퓨터에 Microsoft SQL Server 2012 Native Client를 설치해야합니다. Microsoft SQL Server 2012 Native Client가 아직 설치되지 않은 경우 "요구 사항"문서 페이지 에서 해당 링크를 클릭 하십시오 .


최신 SQLSRV 드라이버를 다운로드하려면 다음으로 이동하십시오. 다운로드

SQLSRV 드라이버에 대한 시스템 요구 사항의 전체 목록은 다음에서 찾을 수 있습니다. 시스템 요구 사항

SQLSRV 3.1 이상을 사용하는 사용자는 SQL Server 용 Microsoft ODBC 드라이버 11을 다운로드해야합니다.

PHP7 사용자는 GitHub 에서 최신 드라이버를 다운로드 할 수 있습니다.

SQL Server 용 Microsoft® ODBC 드라이버 13 은 Microsoft SQL Server 2008, SQL Server 2008 R2, SQL Server 2012, SQL Server 2014, SQL Server 2016 (미리보기), Analytics 플랫폼 시스템, Azure SQL 데이터베이스 및 Azure SQL 데이터웨어 하우스를 지원합니다.

연결 만들기

$dbServer = "localhost,1234"; //Name of the server/instance, including optional port number (default is 1433)
$dbName = "db001"; //Name of the database
$dbUser = "user"; //Name of the user
$dbPassword = "password"; //DB Password of that user

$connectionInfo = array(
    "Database" => $dbName, 
    "UID" => $dbUser,
    "PWD" => $dbPassword
);

$conn = sqlsrv_connect($dbServer, $connectionInfo);

SQLSRV에는 PDO 드라이버도 있습니다. PDO를 사용하여 연결하려면 다음을 수행하십시오.

$conn = new PDO("sqlsrv:Server=localhost,1234;Database=db001", $dbUser, $dbPassword);

간단한 쿼리 만들기

//Create Connection
$conn = sqlsrv_connect($dbServer, $connectionInfo);

$query = "SELECT * FROM [table]"; 
$stmt = sqlsrv_query($conn, $query);

참고 : 대괄호 [] 사용 하면 단어 table 예약어 이므로 이스케이프 처리 됩니다. 역 따옴표와 같은 방법으로이 작업 ` MySQL의에서 할.

저장 프로 시저 호출

서버에서 저장 프로 시저를 호출하려면 :

$query = "{call [dbo].[myStoredProcedure](?,?,?)}"; //Parameters '?' includes OUT parameters

$params = array(
    array($name, SQLSRV_PARAM_IN),
    array($age, SQLSRV_PARAM_IN),
    array($count, SQLSRV_PARAM_OUT, SQLSRV_PHPTYPE_INT) //$count must already be initialised
);

$result = sqlsrv_query($conn, $query, $params);

매개 변수화 된 쿼리 만들기

$conn = sqlsrv_connect($dbServer, $connectionInfo);

$query = "SELECT * FROM [users] WHERE [name] = ? AND [password] = ?";
$params = array("joebloggs", "pa55w0rd");

$stmt = sqlsrv_query($conn, $query, $params);

서로 다른 매개 변수를 사용하여 동일한 쿼리 문을 두 번 이상 사용하려는 경우 sqlsrv_prepare()sqlsrv_execute() 함수를 사용하여 동일한 쿼리 문을 여러 번 사용할 수 있습니다.

$cart = array(
    "apple" => 3,
    "banana" => 1,
    "chocolate" => 2
);

$query = "INSERT INTO [order_items]([item], [quantity]) VALUES(?,?)";
$params = array(&$item, &$qty); //Variables as parameters must be passed by reference

$stmt = sqlsrv_prepare($conn, $query, $params);

foreach($cart as $item => $qty){
    if(sqlsrv_execute($stmt) === FALSE) {
        die(print_r(sqlsrv_errors(), true));
    }
}

쿼리 결과 가져 오기

쿼리에서 결과를 가져 오는 주요 방법에는 세 가지가 있습니다.

sqlsrv_fetch_array ()

sqlsrv_fetch_array() 는 다음 행을 배열로 검색합니다.

$stmt = sqlsrv_query($conn, $query);

while($row = sqlsrv_fetch_array($stmt)) {
    echo $row[0];
    $var = $row["name"];
    //...
}

sqlsrv_fetch_array() 에는 다른 유형의 배열을 반입하기위한 선택적인 두 번째 매개 변수가 있습니다. SQLSRV_FETCH_ASSOC , SQLSRV_FETCH_NUMERICSQLSRV_FETCH_BOTH (기본값)를 사용할 수 있습니다. 각각은 연관, 숫자 또는 연관 배열과 숫자 배열을 각각 반환합니다.


sqlsrv_fetch_object ()

sqlsrv_fetch_object() 는 다음 행을 객체로 가져옵니다.

$stmt = sqlsrv_query($conn, $query);

while($obj = sqlsrv_fetch_object($stmt)) {
    echo $obj->field; // Object property names are the names of the fields from the query
    //...
}

sqlsrv_fetch ()

sqlsrv_fetch() 는 다음 행을 읽을 수 있도록합니다.

$stmt = sqlsrv_query($conn, $query);

while(sqlsrv_fetch($stmt) === true) {
    $foo = sqlsrv_get_field($stmt, 0); //gets the first field -
}

오류 메시지 검색

쿼리가 잘못되었을 때 드라이버가 반환 한 오류 메시지를 가져 와서 문제의 원인을 확인하는 것이 중요합니다. 구문은 다음과 같습니다.

sqlsrv_errors([int $errorsOrWarnings]);

다음을 사용하여 배열을 반환합니다.

기술
SQLSTATE SQL Server / OBDC 드라이버가있는 상태
암호 SQL Server 오류 코드
메시지 오류에 대한 설명

위의 함수를 다음과 같이 사용하는 것이 일반적입니다.

$brokenQuery = "SELECT BadColumnName FROM Table_1";
$stmt = sqlsrv_query($conn, $brokenQuery);

if ($stmt === false) {
    if (($errors = sqlsrv_errors()) != null) {
        foreach ($errors as $error) {
            echo "SQLSTATE: ".$error['SQLSTATE']."<br />";
            echo "code: ".$error['code']."<br />";
            echo "message: ".$error['message']."<br />";
        }
    }
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow