본문 바로가기
MySql

MySQL mysqli bind_param ()은 참조가 될 것으로 예상됩니다.

by 베이스 공부 2021. 1. 3.
반응형

알아낼 수 없음, 오류의 원인 mysqli_stmt :: bind_param ()에 대한 매개 변수 3이 참조가 될 것으로 예상 됨, 값은 ...

PDO
$query = "INSERT INTO test (id,row1,row2,row3) VALUES (?,?,?,?)";
$params = array(1,"2","3","4");
$param_type = "isss";
$sql_stmt = mysqli_prepare ($mysqli, $query);
call_user_func_array('mysqli_stmt_bind_param', array_merge(array($sql_stmt, $param_type), $params));
mysqli_stmt_execute($sql_stmt);

또한 OOP 시도

OOP
$insert_stmt = $mysqli->prepare($query);
array_unshift($params, $param_type);
call_user_func_array(array($insert_stmt, 'bind_param'), $params);
$insert_stmt->execute();

그러나 동일한 오류, 지금은 매개 변수 2가 문제를 일으키고 있습니다.

그래서, $ params의 문제점은 무엇입니까? 값의 배열이 되려면 $ params가 필요합니다.

 

해결 방법

 

업데이트

이 답변은 구식입니다. Stacky의 답변과 같은 최신 PHP 버전에서는 스프레드 연산자를 사용하십시오.

PHP 문서에서 :

mysqli_stmt_bind_param ()을 call_user_func_array ()와 함께 사용할 때는주의해야합니다. mysqli_stmt_bind_param ()은 매개 변수를 참조로 전달해야하는 반면 call_user_func_array ()는 참조 나 값을 나타낼 수있는 변수 목록을 매개 변수로 받아 들일 수 있습니다.


예를 들면 :

call_user_func_array(array($stmt, 'bind_param'), refValues($params));

function refValues($arr){
    if (strnatcmp(phpversion(),'5.3') >= 0) //Reference is required for PHP 5.3+
    {
        $refs = array();
        foreach($arr as $key => $value)
            $refs[$key] = &$arr[$key];
        return $refs;
    }
    return $arr;
}

 

참조 페이지 https://stackoverflow.com/questions/16120822

 

 

반응형

댓글