Meningkatkan pernyataan SQL dengan pembolehubah PHP boleh menghasilkan pertanyaan secara dinamik. Berikut adalah masalah yang anda hadapi:
Untuk menyelesaikan kesilapan ini, sila ikuti panduan berikut:
<code class="language-php">$type = 'testing'; mysql_query("INSERT INTO contents (type, reporter, description) VALUES($type, 'john', 'whatever')");</code>
<.> 1. Gunakan pernyataan pra -proses
Mana -mana pembolehubah yang menunjukkan teks SQL (rentetan, nombor) dalam pernyataan adalah wajib. Berikut adalah alur kerja:
Gunakan tempat menduduki:Pembolehubah digantikan dalam pertanyaan SQL ke simbol penempatan.
prepare()
Jalankan: bind_param()
execute()
dalam pdo:
<.> 2. Melaksanakan penapisan putih
<code class="language-php">$type = 'testing'; $reporter = "John O'Hara"; $description = 'whatever'; //添加了description变量 $sql = "INSERT INTO contents (type,reporter,description) VALUES (?,?,?)"; //修改了占位符数量 $stmt = $mysqli->prepare($sql); $stmt->bind_param("sss", $type, $reporter, $description); //修改了参数类型和数量 $stmt->execute();</code>
Untuk bahagian pertanyaan seperti kata kunci, pengenal atau pengendali, sila gunakan kaedah senarai putih. Tapis pembolehubah ini melalui senarai nilai yang dibenarkan yang telah ditetapkan:
<code class="language-php">$type = 'testing'; $reporter = "John O'Hara"; $description = 'whatever'; //添加了description变量 $sql = "INSERT INTO contents (type,reporter,description) VALUES (?,?,?)"; //修改了占位符数量 $stmt = $mysqli->prepare($sql); $stmt->bind_param("sss", $type, $reporter, $description); //修改了参数类型和数量 $stmt->execute();</code>
Penapis pernyataan pra -proses dan senarai putih, anda boleh menghalang SQL secara berkesan daripada menyuntik serangan, dan mengintegrasikan pembolehubah PHP dengan selamat ke dalam pertanyaan MySQL anda. Sila ambil perhatian bahawa fungsi
telah ditinggalkan. Kod misalnya telah dikemas kini untuk mencerminkan ini dan membaiki kesilapan dalam contoh asal.<code class="language-php">$type = 'testing'; $reporter = "John O'Hara"; $description = 'whatever'; //添加了description变量 $sql = "INSERT INTO contents (type,reporter,description) VALUES (?,?,?)"; //修改了占位符数量 $stmt = $pdo->prepare($sql); $stmt->execute([$type, $reporter, $description]); //修改了参数数量</code>
Atas ialah kandungan terperinci Bagaimana untuk membenamkan pembolehubah PHP dengan selamat dalam pernyataan MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!