PDO bindParam 대 실행
나는 종종 PDO를 사용 bindParam
하거나 사용하는 코드를 봅니다 bindValue
. execute
어떤 이유로 든 단순히 인상 을 찌푸리게 하는 주장을 전달 하는 것입니까?
bindParam
실제로 변수에 바인딩하고 두 bind
메서드 모두에 바인딩되는 매개 변수 유형을 설정할 수 있다는 것을 이해합니다 . 그러나 문자열 만 삽입하는 경우에는 어떻게됩니까?
$query = "SELECT col1 FROM t1 WHERE col2 = :col2 AND col3 = :col3 AND col4 = :col4";
$pdo->bindValue(':col2', 'col2');
$pdo->bindValue(':col3', 'col3');
$pdo->bindValue(':col4', 'col4');
위의 내용을 자주 보지만 개인적으로 선호합니다.
$pdo->execute(array(':col2' => 'col2', ':col3' => 'col3', ':col4' => 'col4'));
쿼리에 대한 입력이 함께 "들어가는"것이 나에게는 장황하지 않고 시각적으로 더 의미가 있습니다. 그러나 나는 그것이 사용되는 것을 거의 보지 못했습니다.
전자의 특별한 동작을 활용할 필요가 없을 때 bind
매개 변수를 전달 하는 것보다 메소드 를 선호하는 이유가 execute
있습니까?
bindParam
변수 참조를 쿼리의 매개 변수에 바인딩하고 싶지만 여전히 일부 조작을 수행하고 쿼리 실행시 계산 된 변수 값만 원할 때 사용되는 것을 찾을 수 있습니다 . 또한 매개 변수를 저장 프로 시저 호출에 바인딩하고 반환 된 값을 바인딩 된 변수로 업데이트하는 것과 같은 더 복잡한 작업을 수행 할 수 있습니다.
자세한 내용은 bindParam 설명서 , bindValue 설명서 및 실행 설명서를 참조하십시오 .
예를 들면
$col1 = 'some_value';
$pdo->bindParam(':col1', $col1);
$col1 = 'some_other_value';
$pdo->execute(); // would use 'some_other_value' for ':col1' parameter
bindValue
execute
매개 변수 값이 그 지점에서 고정되고 그에 따라 SQL이 실행되는 것과 거의 동일한 방식으로 작동하도록 배열을 전달합니다 .
위의 동일한 예를 따르지만 bindValue
$col1 = 'some_value';
$pdo->bindValue(':col1', $col1);
$col1 = 'some_other_value';
$pdo->execute(); // would use 'some_value' for ':col1' parameter
값을 직접 전달하면 execute
모든 값이 문자열로 처리됩니다 (정수 값이 제공 되더라도). 따라서 데이터 유형을 적용해야하는 경우 항상 bindValue
또는 을 사용해야합니다 bindParam
.
나는 당신이 볼 수있는 생각 bind*
이상 사용 execute(array)
을 명시 적으로 매개 변수 선언의 데이터 유형을 정의에 더 나은 코딩 연습을 수 많은 사람들이 그것을 고려한다.
$pdo->execute()
메소드 와 함께 매개 변수를 전달 PDO::PARAM_STR
하면 $pdo->bindParam()
함수 가있는 명령문과 같이 배열의 모든 값이 전달 됩니다.
내가 지금 볼 수있는 주요 차이점은 $pdo->bindParam()
함수를 사용 PDO::PARAM_*
하면 PHP.net 매뉴얼에 설명 된대로 상수를 사용하여 전달 된 데이터 유형을 정의 할 수 있다는 것입니다.
간단하게 bindParam의 값은 변경 될 수 있지만 bindValue의 값은 변경할 수 없습니다. 예:
$someVal=10;
$someVal2=20;
/* In bindParam, the value argument is not bound and
will be changed if we change its value before execute.
*/
$ref->bindParam(':someCol',$someVal);
$someVal=$someVal2;
$ref->execute();
//someCol=20
/* In bindValue, the value argument is bound and
never changed if we change its value before execute.
*/
$ref->bindValue(':someCol',$someVal);
// here assignment is referral (&$someVal)
$someVal=$someVal2;
$ref->execute();
//someCol=10
참조 URL : https://stackoverflow.com/questions/12392424/pdo-bindparam-vs-execute
'programing' 카테고리의 다른 글
C ++ 11은 std :: function 또는 lambda 함수가 관련된 경우 유형을 추론하지 않습니다. (0) | 2021.01.15 |
---|---|
녹아웃 : 계산 된 관찰 가능 vs 함수 (0) | 2021.01.15 |
모니터 (DDMS) 도구를 사용하여 애플리케이션을 디버그하는 방법 (0) | 2021.01.15 |
초기화 목록과 함께 std :: array 사용 (0) | 2021.01.14 |
Javascript removeEventListener가 작동하지 않습니다. (0) | 2021.01.14 |