PDO : Perbezaan bindParam() dan bindValue()

Dalam tutorial Tutorial PHP Data Objects ( PDO ) yang lepas, saya ada menggunakan method bindParam() untuk "bind" parameter kepada pemboleh ubah tertentu. Ada yang bertanya mengapa tidak menggunakan bindValue(). Jawapan ringkas, tiada masalah untuk gunakan bindParam() atau bindValue().

Tetapi lebih baik saya tunjukkan perbezaan antara kedua method ini dan anda tentukan yang mana perlu.



bindValue()

Bind nilai kedalam parameter. bindValue() membolehkan kita menghantar nilai pemboleh ubah kedalam parameter yang akan di hantar ke dalam query sewaktu sql statement di-execute()

sebagai contoh, jika kita mempunyai arahan sql seperti
SELECT * FROM users WHERE id = ?
kita boleh menghantar nilai ID menggunakan bindValue() seperti
$id = 2; $stmt->bindValue(1, $id, PDO::PARAM_INT);

bindParam()

Bind parameter kepada pemboleh ubah tertentu.Pada asasnya bindValue() dan bindParam() kelihatan sama, tetapi berbeza dari bindValue(), Pemboleh ubah dalam bindParam() di bound sebagai reference dan akan evaluate ketika method execute() di panggil. Ini membolehkan kita mengumpuk nilai berbeza dan mengulangi arahan execute() untuk mendapatkan result yang berbeza. Sangat berguna jika kita ingin mengulang query yang sama dengan nilai pemboleh ubah yang berbeza.
Ada sebarang pertanyaan, cadangan, komen atau pembetulan? Sila nyatakan di ruangan komen di bawah.