2014-02-10 1 views
1

PDO의 bindParams를 사용하는 대신 execute() 메소드에 배열로 PDO 쿼리 매개 변수를 전달하고 싶습니다. 필자는 이렇게함으로써 매개 변수의 수가 다른 유사한 쿼리를 동적으로 실행하는 함수 하나를 만들 수 있습니다.

bindParam() 경로가 예상 결과 산출 :

$stmt->bindParam(":user_id",$user_id,PDO::PARAM_INT); 
$stmt->bindParam(":n",$n,PDO::PARAM_INT); 

$stmt->execute(); 

을하지만이 방법은 발생 오류없이 빈 집합 반환

$params = array(":user_id"=>$user_id,":n"=>$n); 

$stmt->execute($params); 

누군가가 나에게 설명 할 수 무엇 이들의 차이 두 가지 방법이 있으며 내 문제의 원인은 무엇입니까? 내가보고있는 유일한 차이점은 $ params를 .execute 인수로 전달할 때 형식 (POD :: PARAM_INT)을 지정할 기회가없는 것입니다. 그것이 문제라면, 이것에 대한 해결책이 있습니까?

+0

이것은 중복 질문이 아닙니다. 이 질문은 어떤 것을 사용할 것인지 묻습니다. 내 질문은 어떻게 실행을 적절하게 사용하는지 묻습니다. 질문을 복제물로 표시하기 전에 더 자세히 읽으십시오. – nathan

+2

귀하의 질문은 일반적인 [** xy 문제 **]입니다. (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) LIMIT 변수를 바인딩하는 것에 대해 물어 본 적이 있다면 많은 답변을 발견 [** ie **] (http://stackoverflow.com/questions/2269840/php-pdo-bindvalue-in-limit) –

+0

@ davidstrachan, 나는 동의합니다. 나는 구체적으로하려고 노력하지만, LIMIT에 대한 가치를 구속하는 질문을 할 때 내 문제와 관련이 있다는 것을 깨닫지 못했습니다. – nathan

답변

0

매개 변수를 LIMIT 절 값에 할당하려고했기 때문에이 쿼리가 실패한 것을 발견했습니다. 매개 변수를 실행 함수에 전달할 때 PDO는 모든 매개 변수를 따옴표로 묶고 LIMIT 절은 따옴표 붙은 매개 변수를 처리 할 수 ​​없습니다.

해결책은 (내가 더 기대하는 바를 찾을 때까지) 나머지 매개 변수를 추가하기 전에 전체 LIMIT 절을 생성하는 쿼리에 대한 구 학교 문자열 연결입니다.