PDOStatement::bindParam
SQL 문의 명명된 자리 표시 또는 물음표 자리 표시자에 매개 변수를 바인딩합니다.
구문
bool PDOStatement::bindParam($parameter, &$variable[, $data_type[, $length[, $driver_options]]]);
매개 변수
$매개 변수: (혼합) 매개 변수 식별자입니다. 명명된 자리 표시자를 사용하는 명령문의 경우 매개 변수 이름(:name)을 사용합니다. 물음표 구문을 사용하는 준비된 문의 경우 매개 변수의 1부터 시작하는 인덱스입니다.
&$variable: SQL 문 매개 변수에 바인딩할 PHP 변수의 (혼합) 이름입니다.
$data_type: 선택적(정수) PDO::P ARAM_* 상수입니다. 기본값은 PDO::P ARAM_STR입니다.
$length: 데이터 형식의 선택적(정수) 길이입니다. PDO::SQLSRV_PARAM_OUT_DEFAULT_SIZE 지정하여 PDO::P ARAM_INT 또는 PDO::P ARAM_BOOL을 사용할 때 기본 크기를 $data_type 지정할 수 있습니다.
$driver_options: 선택적(혼합) 드라이버별 옵션입니다. 예를 들어 PDO::SQLSRV_ENCODING_UTF8 지정하여 열을 UTF-8로 인코딩된 문자열로 변수에 바인딩할 수 있습니다.
Return Value
성공하면 TRUE이고, 그렇지 않으면 FALSE입니다.
설명
varbinary, binary 또는 varbinary(max) 형식의 서버 열에 null 데이터를 바인딩하는 경우 $driver_options 사용하여 이진 인코딩(PDO::SQLSRV_ENCODING_BINARY)을 지정해야 합니다. 인코딩 상수에 대한 자세한 내용은 상수를 참조하세요.
Microsoft Drivers for PHP for SQL Server의 2.0 버전에서 PDO에 대한 지원이 추가되었습니다.
매개 변수 예제
이 코드 샘플은 $contact 매개 변수에 바인딩된 후 값을 변경하면 쿼리에 전달된 값이 변경된다는 것을 보여줍니다.
<?php
$database = "AdventureWorks";
$server = "(local)";
$conn = new PDO("sqlsrv:server=$server ; Database = $database", "", "");
$contact = "Sales Agent";
$stmt = $conn->prepare("select * from Person.ContactType where name = ?");
$stmt->bindParam(1, $contact);
$contact = "Owner";
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
print "$row[Name]\n\n";
}
$stmt = null;
$contact = "Sales Agent";
$stmt = $conn->prepare("select * from Person.ContactType where name = :contact");
$stmt->bindParam(':contact', $contact);
$contact = "Owner";
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
print "$row[Name]\n\n";
}
?>
출력 매개 변수 예제
이 코드 샘플에서는 출력 매개 변수에 액세스하는 방법을 보여줍니다.
<?php
$database = "Test";
$server = "(local)";
$conn = new PDO("sqlsrv:server=$server ; Database = $database", "", "");
$input1 = 'bb';
$stmt = $conn->prepare("select ? = count(*) from Sys.tables");
$stmt->bindParam(1, $input1, PDO::PARAM_STR, 10);
$stmt->execute();
echo $input1;
?>
참고 항목
출력 매개 변수를 bigint 형식에 바인딩할 때 값이 정수 범위를 벗어나게 될 수 있는 경우 PDO::P ARAM_INT를 PDO::SQLSRV_PARAM_OUT_DEFAULT_SIZE 사용하면 "범위를 벗어난 값" 예외가 발생할 수 있습니다. 따라서 기본 PDO::P ARAM_STR을 대신 사용하고 결과 문자열의 크기(최대 21)를 제공합니다. 21은 음수 부호를 포함한 모든 bigint 값의 최대 자릿수입니다.
입력/출력 예제
이 코드 샘플에서는 입력/출력 매개 변수를 사용하는 방법을 보여줍니다.
<?php
$database = "AdventureWorks";
$server = "(local)";
$dbh = new PDO("sqlsrv:server=$server ; Database = $database", "", "");
$dbh->query("IF OBJECT_ID('dbo.sp_ReverseString', 'P') IS NOT NULL DROP PROCEDURE dbo.sp_ReverseString");
$dbh->query("CREATE PROCEDURE dbo.sp_ReverseString @String as VARCHAR(2048) OUTPUT as SELECT @String = REVERSE(@String)");
$stmt = $dbh->prepare("EXEC dbo.sp_ReverseString ?");
$string = "123456789";
$stmt->bindParam(1, $string, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT, 2048);
$stmt->execute();
print $string; // Expect 987654321
?>
참고 항목
PHP에서는 부동 소수점 숫자의 정밀도가 제한되어 있으므로 decimal 또는 numeric 열에 값을 바인딩할 때는 정밀도와 정확도를 보장하기 위해 문자열을 입력으로 사용하는 것이 좋습니다. 특히 값이 정수 범위를 벗어난 경우 bigint 열에도 동일하게 적용됩니다.
10진수 입력 예제
이 코드 샘플에서는 10진수 값을 입력 매개 변수로 바인딩하는 방법을 보여줍니다.
<?php
$database = "Test";
$server = "(local)";
$conn = new PDO("sqlsrv:server=$server ; Database = $database", "", "");
// Assume TestTable exists with a decimal field
$input = "9223372036854.80000";
$stmt = $conn->prepare("INSERT INTO TestTable (DecimalCol) VALUES (?)");
// by default it is PDO::PARAM_STR, rounding of a large input value may
// occur if PDO::PARAM_INT is specified
$stmt->bindParam(1, $input, PDO::PARAM_STR);
$stmt->execute();