Termasuk Pembolehubah PHP dalam Penyata MySQL
Dalam senario ini, anda menghadapi isu semasa memasukkan nilai ke dalam jadual "kandungan", khususnya apabila menggunakan pembolehubah PHP "$type" dalam bahagian "VALUES" pada pernyataan MySQL. Mari kita mendalami pendekatan yang sesuai.
1. Gunakan Penyata Disediakan (Disyorkan)
Kaedah ini menangani 99% pertanyaan, termasuk pertanyaan anda. Sebarang pembolehubah yang mewakili literal data SQL (rentetan atau nombor) mesti digabungkan melalui pernyataan yang disediakan, tanpa pengecualian. Nilai statik, walau bagaimanapun, boleh dimasukkan seperti sedia ada.
Proses penyediaan memerlukan empat peringkat:
Begini cara ia berfungsi dalam pemacu pangkalan data yang berbeza:
mysqli dengan PHP 8.2 :
$sql = "INSERT INTO contents (type, reporter, description) VALUES ('whatever', ?, ?)"; $mysqli->execute_query($sql, [$reporter, $description]);
mysqli dengan PHP Terdahulu Versi:
$stmt = $mysqli->prepare("INSERT INTO contents (type, reporter, description) VALUES ('whatever', ?, ?)"); $stmt->bind_param("ss", $reporter, $description); $stmt->execute();
PDO:
$sql = "INSERT INTO contents (type, reporter, description) VALUES ('whatever', ?, ?)"; $stmt = $pdo->prepare($sql); $stmt->execute([$reporter, $description]);
2. Laksanakan Penapisan Senarai Putih untuk Bahagian Pertanyaan
Jika anda perlu memasukkan pembolehubah yang mewakili bahagian tertentu pertanyaan SQL, seperti kata kunci, nama jadual atau medan atau pengendali, gunakan "senarai putih" untuk memastikan kesahihannya.
Sebagai contoh, jika pembolehubah mewakili susunan mengikut medan:
$allowed = ["name", "price", "qty"]; $key = array_search($orderby, $allowed, true); if ($key === false) { throw new InvalidArgumentException("Invalid field name"); }
Begitu juga, semak untuk arahan pesanan yang sah:
$allowed = ["ASC", "DESC"]; $key = array_search($direction, $allowed, true); if ($key === false) { throw new InvalidArgumentException("Invalid ORDER BY direction"); }
Setelah disahkan, sediakan Rentetan pertanyaan dan ingat untuk melepaskan pengecam dengan betul mengikut sintaks MySQL:
$query = "SELECT * FROM `table` ORDER BY `$orderby` $direction";
Atas ialah kandungan terperinci Bagaimana untuk Memasukkan Pembolehubah PHP dengan Selamat dalam Penyata INSERT MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!