MySQL을 사용한 C# 준비 문은 실패하지만 일반 문은 작동하는 이유는 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-16 15:32:03
원래의
299명이 탐색했습니다.

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

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿