문제

프로젝트에서는 난 마무리하는데,작성 및 구현하는 객체 관계형 매핑에 대한 솔루션 PHP.하기 전에 정당성을 의심하는 사람들과 몽상가 부르짖"어떻게?", 휴식-난지를 만들 수 있는 방법을 발견 늦은 정적인딩 작업--나는 그냥 그 주위에 최선의 방법으로는 가능하게 할 수 있습니다.

어쨌든,나는 현재 사용하지 않는 준비된 문에 대한 쿼리를 수 없었기 때문에 나는 방법을 전달하는 변수의 번호를 인수 bind_params()bind_result() 방법이 있습니다.

왜 필요한가를 지원하는 변수의 번호를 인수를 물어?기 때문에 수퍼 클래스의 내 모델(의 솔루션으로 해킹-up PHP ActiveRecord 워너비)는 쿼리를 정의되고,그래서 찾을 수 있습니다()메소드,예를 들어,는 방법을 알고하지 않는 많은 매개 변수가 필요합니다 바인딩.

지금,나는 이미 생각이는 건물의 인수 목록과 문자열을 전달하 eval()지만,저는 좋아하지 않는 솔루션을 매우 많-히 구현하는 내 자신의 보안 검사를 통과에 문이 있습니다.

누군가가 어떤 제안(또는 성공 사례)에 대 한 이를 수행하는 방법은?할 수 있는 경우 해결하는 데 도움이 이 첫 번째 문제는,아마도 우리는 해결할 수 있는 바인딩 결정(무언가를 생각이 더 어려울 것,또는 적어도 더 많은 리소스가 포함 하는 경우는 초기 쿼리를 결정하는 테이블 구조).

도움이 되었습니까?

해결책

PHP 전달할 수 있는 변수의 번호를 인수하는 기능 또는 방법을 사용하여 call_user_func_array.에 대한 예법이 될 것이다:

call_user_func_array(array(&$stmt, 'bindparams'), $array_of_params);

함수가 호출됩니다 각 회원에서 배로 전달되는 자신의 인수입니다.

다른 팁

당신은지 확인하는 것$array_of_params 는 배열의 대한 링크를 변수, 지 값이다.어야 한다:

$array_of_params[0] = &$param_string; //link to variable that stores types

그리고...

$param_string .= "i";
$user_id_var = $_GET['user_id'];//
$array_of_params[] = &$user_id_var; //link to variable that stores value

그렇지 않으면(는 경우 그것은 배열의 값)을 얻을 것이다:

PHP 경고:매개 변수 2mysqli_stmt::bind_param()expected to be a reference


하나 더 많은 예제:

$bind_names[] = implode($types); //putting types of parameters in a string
for ($i = 0; $i < count($params); $i++)
{
   $bind_name = 'bind'.$i; //generate a name for variable bind1, bind2, bind3...
   $$bind_name = $params[$i]; //create a variable with this name and put value in it
   $bind_names[] = & $$bind_name; //put a link to this variable in array
}

고 BOOOOOM:

call_user_func_array( array ($stmt, 'bind_param'), $bind_names); 

내가 편집할 수 없지만 내가 믿는 코드

call_user_func_array(array(&$stmt, 'bindparams'), $array_of_params);

참조에 앞$stmt 이 필요하지 않습니다.이 $stmt 은 개체고 bindparams 는 방법에 있는 객체 참조가 필요하지 않습니다.그것이 있어야:

call_user_func_array(array($stmt, 'bindparams'), $array_of_params);

에 대한 더 많은 정보를 참조하십시오 PHP 설명서 콜백 함수."

call_user_func_array(array(&$stmt, 'bindparams'), $array_of_params);

지 환경에서의 이 대답에 저를 설정합니다.실제로 무슨 일이었:

$sitesql = '';
$array_of_params = array();
foreach($_POST['multiselect'] as $value){
    if($sitesql!=''){
        $sitesql .= "OR siteID=? ";
        $array_of_params[0] .= 'i';
        $array_of_params[] = $value;
    }else{
        $sitesql = " siteID=? ";
        $array_of_params[0] .= 'i';
        $array_of_params[] = $value;
    }
}

$stmt = $linki->prepare("SELECT IFNULL(SUM(hours),0) FROM table WHERE ".$sitesql." AND week!='0000-00-00'");
call_user_func_array(array(&$stmt, 'bind_param'), $array_of_params);
$stmt->execute();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top