mysqli bind_param() Ralat: Melepasi Nilai Daripada Rujukan
Ralat "Parameter 3 kepada mysqli_stmt::bind_param() dijangka akan rujukan, nilai yang diberikan" timbul apabila mysqli_stmt::bind_param() menghantar tatasusunan nilai dan bukannya tatasusunan rujukan kepada nilai tersebut.
Dalam kod PDO yang disediakan:
$params = array(1,"2","3","4");
Tatasusunan $params mengandungi nilai dan bukannya rujukan kepada nilai tersebut. Untuk membetulkannya, gunakan & untuk membuat rujukan:
$params = array(1,&"2", &"3", &"4");
Begitu juga, dalam kod OOP:
array_unshift($params, $param_type);
Baris ini menambah rentetan $param_type ke permulaan tatasusunan $params, tetapi ia tidak membuat rujukan kepada nilai parameter. Untuk membuat rujukan, gunakan aksara &:
array_unshift($params, $param_type); foreach ($params as $key => $value) { $params[$key] =& $value; }
Dalam PHP versi 5.6 dan ke atas, anda boleh menggunakan operator spread (... ) untuk menghantar tatasusunan $params sebagai hujah individu tanpa perlu membuat rujukan secara manual:
mysqli_stmt_bind_param($sql_stmt, $param_type, ...$params); $insert_stmt->bind_param($param_type, ...$params);
Dengan lulus rujukan atau menggunakan operator spread, anda boleh memastikan bahawa mysqli_stmt::bind_param() menerima tatasusunan rujukan kepada nilai parameter, menyelesaikan ralat.
Atas ialah kandungan terperinci Mengapa mysqli_stmt::bind_param() Membuang 'Parameter ... dijangka menjadi rujukan, nilai diberikan'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!