MySql을 사용하여 C#에서 준비된 문 문제 해결
C# 프로그램에서 준비된 문을 구현하는 동안 걸림돌이 발생했습니다. 일반 명령문으로 전환하면 코드가 원활하게 작동하므로 당황스럽습니다. 이러한 불일치의 잠재적 원인을 조사해 보겠습니다.
제공하신 코드 조각에서:
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);
주요 차이점은 SQL 쿼리에서 작은따옴표(' ')를 사용하는 것입니다. 준비된 문은 매개 변수 자리 표시자(@val1, @val2)를 활용하여 SQL 삽입 공격을 방지합니다. 일반 문을 사용할 때는 쿼리 자체 내에서 작은따옴표를 이스케이프 처리해야 합니다.
이 문제를 해결하려면 다음과 같이 코드를 수정하는 것이 좋습니다.
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();
쿼리를 실행하고 매개변수를 추가한 후 cmd.Prepare()를 사용하여 준비된 문이 작동하는지 확인합니다. 이 접근 방식은 악의적인 삽입으로부터 코드를 보호하고 보안을 강화합니다.
위 내용은 MySQL을 사용한 C# 준비 문은 실패하지만 일반 문은 작동하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!