c++_mysql 값이 없을 때 에러
글쓴이: kimha1999 / 작성시간: 목, 2020/12/03 - 10:59오전
mysql을 c++로 연동하여 사용하고 있습니다.
근데 DB에 없는 값을 서치하면 에러가 뜹니다.
값이 없어도 에러가 나지 않게 예외처리를 해주고 싶습니다.
query = "SELECT pw FROM r WHERE account = '";
query += a;
query += "'";
if (mysql_query(conn, query.c_str()))
{
fprintf(stderr, "%s ", mysql_error(conn));
exit(1);
}
res = mysql_store_result(conn);
row = mysql_fetch_row(res);
여기서 a는 변수이고, 변수가 없는 데이터면 에러가 납니다.
Forums:
a 가 없다는 건가요 쿼리 값이 없다는 건가요?
a 가 없다는 건가요 쿼리 값이 없다는 건가요?
------------------------------------------------------------
ProgrammingHolic
.
데이터베이스에 연동하여서
그 안에 데이터가 없는 걸 뜻합니다.
만약에 name이란 필드에 김이랑 박만 있는데 변수 a에 이를 넣어서 진행했을 때의 데이터가 없어서 나오는 오류요.
아래 분이 답글 작성하셨네요
아래 분이 답글 작성하셨네요
row 의 길이를 체크 하면 0 아니면 1 이상이 나오겠죠
------------------------------------------------------------
ProgrammingHolic
mysql_fetch_row의 반환값을 체크하세요.
mysql_fetch_row의 반환값을 체크하세요.
제시된 상황에서 에러는 DB에서 발생하는 게 아닙니다.
DB는 SELECT의 조건을 만족하는 row가 하나도 없더라도 전혀 문제가 없습니다. 그냥 empty result set을 돌려줄 뿐입니다.
mysql_fetch_row 역시 반환할 row가 없으면 그냥 NULL을 반환합니다.
그 상황에서 만약 에러가 발생한다면, mysql_fetch_row의 반환값 row를 NULL check 없이 그대로 사용해서 발생했을 가능성이 높습니다.
====
그건 그렇고, 노파심에 여쭙습니다만 변수 a는 사전에 적절히 sanitize 하셨겠죠??
만약 그러지 않았다면 매우 위험한 프로그램을 만들고 계신 겁니다.
댓글 달기