Kode berikut hanya mendeklarasikan variabel string yang berisi query MySQL:
$sql = "INSERT INTO users (username, password, email)
VALUES ('".$_POST["username"]."','".$_POST["password"]."','".$_POST["email"]."')";
Itu tidak mengeksekusi kueri. Untuk melakukannya, Anda perlu menggunakan beberapa fungsi, tetapi izinkan saya menjelaskan hal lain terlebih dahulu.
JANGAN PERCAYA INPUT PENGGUNA :Anda tidak boleh menambahkan input pengguna (seperti input formulir dari $_GET
atau $_POST
) langsung untuk permintaan Anda. Seseorang dapat dengan hati-hati memanipulasi input sedemikian rupa sehingga dapat menyebabkan kerusakan besar pada database Anda. Itu disebut Injeksi SQL. Anda dapat membaca lebih lanjut tentangnya di sini
Untuk melindungi skrip Anda dari serangan semacam itu, Anda harus menggunakan Pernyataan yang Disiapkan. Selengkapnya tentang pernyataan yang disiapkan di sini
Sertakan pernyataan yang sudah disiapkan ke kode Anda seperti ini:
$sql = "INSERT INTO users (username, password, email)
VALUES (?,?,?)";
Perhatikan bagaimana ?
digunakan sebagai pengganti nilai. Selanjutnya Anda harus menyiapkan pernyataan menggunakan mysqli_prepare
:
$stmt = $mysqli->prepare($sql);
Kemudian mulailah mengikat variabel input ke pernyataan yang disiapkan:
$stmt->bind_param("sss", $_POST['username'], $_POST['email'], $_POST['password']);
Dan akhirnya jalankan pernyataan yang sudah disiapkan. (Di sinilah penyisipan yang sebenarnya terjadi)
$stmt->execute();
CATATAN Meskipun bukan bagian dari pertanyaan, saya sangat menyarankan Anda untuk tidak pernah menyimpan kata sandi dalam teks yang jelas. Sebagai gantinya, Anda harus menggunakan password_hash
untuk menyimpan hash kata sandi