Masalah:
Dalam PHP, menggunakan pembolehubah di dalam Pernyataan MySQL yang disertakan dalam VALUES menyebabkan isu.
Soalan:
Mengapa memasukkan pembolehubah dalam VALUES mengakibatkan ralat?
Jawapan:
Terdapat dua pendekatan berbeza untuk memasukkan pembolehubah PHP dalam pernyataan MySQL dengan betul:
Gunakan Penyata Disediakan:
Untuk pembolehubah yang mewakili literal data SQL (rentetan, nombor), pernyataan yang disediakan mesti digunakan. Ini melibatkan:
Contoh (mysqli):
$type = 'testing'; $sql = "INSERT INTO contents (type, reporter, description) VALUES ('whatever', ?, ?)"; $mysqli->execute_query($sql, [$type, $reporter, $description]);
Gunakan Penapisan Senarai Putih:
Untuk sebarang pembolehubah lain yang mewakili bahagian pertanyaan (mis., kata kunci , pengecam), ia mesti ditapis melalui senarai putih, memastikan hanya nilai yang dibenarkan digunakan. Contoh (menyemak pesanan mengikut):
$orderby = $_GET['orderby'] ?: 'name'; $allowed = ['name', 'price', 'qty']; $key = array_search($orderby, $allowed); if ($key === false) throw new InvalidArgumentException("Invalid field name");
Kesimpulan:
Mematuhi prinsip ini melindungi daripada suntikan SQL dan memastikan pelaksanaan pertanyaan yang betul apabila pembolehubah PHP terlibat. Penyataan yang disediakan hendaklah digunakan untuk literal data, manakala penyenaraian putih memastikan hanya nilai yang dibenarkan dimasukkan di bahagian lain pertanyaan.
Atas ialah kandungan terperinci Mengapa Pembolehubah PHP Menyebabkan Ralat Apabila Digunakan dalam Klausa VALUES MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!