기본적으로 을 통해 mysqli::bind_param으로 전화하려고합니다.call_user_func_array with references
function Insert($table, $values=array(), $flags=0) {
$field_count = count($values);
if($field_count > 0) {
$fields = implode(',',array_keys($values));
$placeholders = implode(',',array_repeat('?',$field_count));
} else {
$fields = '';
$placeholders = '';
}
if($flags > 0) {
$flag_arr = array();
if($flags & self::LOW_PRIORITY) $flag_arr[] = 'LOW_PRIORITY';
if($flags & self::DELAYED) $flag_arr[] = 'DELAYED';
if($flags & self::HIGH_PRIORITY) $flag_arr[] = 'HIGH_PRIORITY';
if($flags & self::IGNORE) $flag_arr[] = 'IGNORE';
$flags_str = implode(' ',$flag_arr);
} else {
$flags_str = '';
}
$sql = "INSERT $flags_str INTO $table ($fields) VALUES ($placeholders)";
$stmt = $this->mysqli->prepare($sql);
if($stmt === false) {
throw new Exception('Error preparing MySQL statement.<br/>MSG: '.$this->mysqli->error.'<br/>SQL: '.$sql);
}
if($field_count > 0) {
$types = '';
foreach($values as $val) {
if(is_int($val)) $types .= 'i';
elseif(is_float($val)) $types .= 'd';
elseif(is_string($val)) $types .= 's';
else $types .= 'b';
}
$params = array_merge(array($types),array_values($values));
call_user_func_array(array($stmt,'bind_param'),$params);
}
$stmt->execute();
return $stmt;
}
문제는 call_user_func_array
라인에서 발생
여기 내 기능입니다. 이 오류가 발생합니다.
Parameter 2 to mysqli_stmt::bind_param() expected to be a reference, value given
나는이 문제를 이해하고 있으며 어떻게 해결해야할지 모르겠다. 예를 들어
이, 함수가 다음과 같이 호출 할 수 있습니다 :$db->Insert('pictures',array('views'=>1));
그리고 var_dump($params)
이 얻을 것이다 : 그래서
array
0 => string 'i' (length=1)
1 => int 1
을,의 변수 번호 mysqli::bind_param
를 호출하는 방법은 무엇입니까 논쟁, 또는 어떻게 든 내 배열을 참조로 만드시겠습니까?
이 문제를 해결하는 몇 가지 다른 질문이 있습니다. 그 중 하나는 다음과 같습니다. 그 중 하나 : http://stackoverflow.com/questions/295016/is-it-possible-to-pass-parameters-by-reference-using-call-user -func-array – deviousdodo