Mengelakkan Ralat "Tidak boleh lulus parameter melalui rujukan" dengan bindParam
Apabila bekerja dengan PDO, anda mungkin menghadapi ralat yang membingungkan "Tidak boleh lulus parameter dengan rujukan" apabila menggunakan bindParam dengan nilai malar seperti PDO::PARAM_NULL.
Sebab ralat ini terletak pada sifat bindParam. Tidak seperti bindValue, yang mengikat nilai pada parameter pada masa panggilan, bindParam mengikat pembolehubah melalui rujukan. Ini bermakna bindParam menjangkakan pembolehubah yang boleh diubah suai semasa pelaksanaan pertanyaan. Menggunakan nilai malar seperti PDO::PARAM_NULL, yang tidak boleh diubah suai, mencetuskan ralat.
Untuk menyelesaikan isu ini, penyelesaiannya ialah menggunakan bindValue dan bukannya bindParam untuk nilai tetap. bindValue menerima nilai sebagai parameter kedua dan tidak memerlukan rujukan.
Berikut ialah contoh menggunakan bindValue dengan betul:
$stmt = $dbh->prepare('INSERT INTO table(v1, v2, ...) VALUES(:v1, :v2, ...)'); $stmt->bindValue(':v1', null, PDO::PARAM_INT);
Dalam kes ini, bindValue memberikan nilai null kepada :v1 parameter dengan jenis data PDO::PARAM_INT.
Perhatikan bahawa semasa dokumentasi PHP mencadangkan menggunakan bindValue(':param', null, PDO::PARAM_NULL), ia mungkin tidak berfungsi dalam semua kes. Oleh itu, adalah disyorkan untuk menggunakan PDO::PARAM_INT atau jenis data yang sesuai.
Atas ialah kandungan terperinci Mengapakah PDO Melemparkan Ralat \'Tidak boleh lulus parameter melalui rujukan\' dan Bagaimana Saya Boleh Membetulkannya Menggunakan bindValue?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!