Rumah  >  Artikel  >  pangkalan data  >  Mengapa Penyata C# Saya Disediakan dengan MySQL Gagal, Tetapi Kenyataan Biasa Berfungsi?

Mengapa Penyata C# Saya Disediakan dengan MySQL Gagal, Tetapi Kenyataan Biasa Berfungsi?

Patricia Arquette
Patricia Arquetteasal
2024-11-16 15:32:03302semak imbas

Why Does My C# Prepared Statement with MySQL Fail, But a Regular Statement Works?

Menyelesaikan Masalah Isu Penyata Disediakan dalam C# dengan MySql

Anda telah menghadapi halangan semasa melaksanakan pernyataan yang disediakan dalam program C# anda. Apabila beralih kepada pernyataan biasa, kod anda beroperasi dengan lancar, membuatkan anda tertanya-tanya. Mari kita siasat kemungkinan penyebab di sebalik percanggahan ini.

Dalam coretan kod yang anda berikan:

cmd = new MySqlCommand("SELECT * FROM admin WHERE admin_username='@val1' AND admin_password=PASSWORD('@val2')", MySqlConn.conn);
//cmd.Prepare();
//cmd.Parameters.AddWithValue("@val1", tboxUserName.Text);
//cmd.Parameters.AddWithValue("@val2", tboxPassword.Text);
cmd = new MySqlCommand("SELECT * FROM admin WHERE admin_username='"+tboxUserName.Text+"' AND admin_password=PASSWORD('"+tboxPassword.Text+"')", MySqlConn.conn);

Pembezaan utama terletak pada penggunaan petikan tunggal (' ') dalam pertanyaan SQL. Penyata yang disediakan memanfaatkan ruang letak parameter (@val1, @val2) untuk mengelakkan serangan suntikan SQL. Apabila menggunakan pernyataan biasa, anda mesti melepaskan petikan tunggal dalam pertanyaan itu sendiri.

Untuk menyelesaikan isu ini, pertimbangkan untuk mengubah suai kod anda seperti berikut:

cmd = new MySqlCommand("SELECT * FROM admin WHERE admin_username=@val1 AND admin_password=PASSWORD(@val2)", MySqlConn.conn);
cmd.Parameters.AddWithValue("@val1", tboxUserName.Text);
cmd.Parameters.AddWithValue("@val2", tboxPassword.Text);
cmd.Prepare();

Dengan mengalih keluar petikan tunggal ' daripada pertanyaan dan menggunakan cmd.Prepare() selepas menambah parameter, anda memastikan bahawa pernyataan yang disediakan berfungsi. Pendekatan ini melindungi kod anda daripada suntikan berniat jahat dan meningkatkan keselamatannya.

Atas ialah kandungan terperinci Mengapa Penyata C# Saya Disediakan dengan MySQL Gagal, Tetapi Kenyataan Biasa Berfungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn