Rumah > pembangunan bahagian belakang > tutorial php > Bagaimana untuk Menyelesaikan Ralat 'mysqli_stmt::bind_param() Dijangka sebagai Rujukan, Nilai Diberi'?

Bagaimana untuk Menyelesaikan Ralat 'mysqli_stmt::bind_param() Dijangka sebagai Rujukan, Nilai Diberi'?

Susan Sarandon
Lepaskan: 2024-12-01 14:04:10
asal
987 orang telah melayarinya

How to Resolve the

mysqli bind_param() Ralat Rujukan Parameter: Menyelesaikan dengan Fungsi RefValues

Mengapa saya menerima ralat "mysqli_stmt::bind_param menjadi rujukan, nilai diberikan"?

Ralat "mysqli_stmt::bind_param() dijangka menjadi rujukan, nilai diberikan" berlaku apabila anda cuba menghantar pembolehubah atau nilai mengikut nilai kepada kaedah bind_param() yang menjangkakan rujukan . Isu ini boleh timbul apabila menggunakan call_user_func_array() untuk menghantar berbilang parameter kepada bind_param().

Memahami Isu

Fungsi MySQL, termasuk bind_param(), memerlukan pembolehubah diluluskan sebagai rujukan untuk prestasi optimum. Walau bagaimanapun, call_user_func_array() menjangkakan parameter sebagai nilai. Ketidakpadanan dalam jangkaan ini membawa kepada ralat.

Penyelesaian: Menggunakan fungsi RefValues()

Untuk menyelesaikan isu ini, anda boleh menggunakan fungsi refValues(), yang menukar tatasusunan nilai menjadi tatasusunan rujukan. Berikut ialah contoh:

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;
}

$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), refValues($params)));
mysqli_stmt_execute($sql_stmt);
Salin selepas log masuk

Penyelesaian Alternatif: Menggunakan Operator Spread

Dalam versi PHP yang lebih baharu, anda boleh menggunakan operator spread (...) untuk menukar tatasusunan nilai menjadi tatasusunan rujukan. Berikut ialah contoh:

$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([$sql_stmt, 'bind_param'], [$param_type, ...$params]);
mysqli_stmt_execute($sql_stmt);
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat 'mysqli_stmt::bind_param() Dijangka sebagai Rujukan, Nilai Diberi'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan