2014-07-08 2 views
2

수신 할 매개 변수의 수를 알지 못하면 어떻게합니까?bind_param에서 알 수없는 매개 변수 수

if($a==1) $filter.=" AND u.name = ?"; 
if($b==1) $filter.=" AND u.address = ?"; 
if($c==1) $filter.=" AND u.age = ?"; 
if($d==1) $filter.=" AND u.city = ?"; 
ETC... 

$stmt->prepare("SELECT id 
       FROM users u 
       WHERE u.cp = ? 
       ".$filter); 

$stmt->bind_param("i", $cp); 

그리고 지금 : 예를 들어

? $ a = 1을받는다면 bind_param에 1 개의 매개 변수만을 전달하기 때문에 오류가 발생합니다. 그래서 만약 당신이 1, 2, 3 또는 4 매개 변수를받을 것이고 나는 "IF"를 많이 만들고 싶지 않거나 매개 변수의 수를 세는 루프를 사용해야한다는 것을 모릅니다.

답변

1

조건을 추가 할 때 인수 목록 (유형 및 값)을 관리해야합니다. 즉, call_user_func_array을 사용하여 값 목록을 bind_param으로 전달해야합니다.

기본적으로 모든 if 문에는 조건을 추가 할뿐만 아니라 매개 변수 유형 (예 : $types .= 'i')과 매개 변수 (예 : $args[]=$arg)를 추가합니다. http://www.php.net/manual/en/mysqli-stmt.bind-param.php#109256

:

당신은 bind_param 문서의 주석에서이 작업을 수행하는 방법에 대한 좋은 예를 찾을 수 있습니다

관련 문제