0
bool MySql_Register(const char* id, const char* pw) {
MYSQL* connect_ptr;
connect_ptr = mysql_init(NULL);
if(!mysql_real_connect(connect_ptr, HOST, USER, PW, NAME, 3306, NULL, 0)) {
fprintf(stderr, "%s ",mysql_error(connect_ptr));
exit(1);
}
char sql[256] = {0};
sprintf(sql, "select * from user where id='%s'", id);
mysql_query(connect_ptr, sql);
int len = mysql_affected_rows(connect_ptr);
if(len == 1)
return PK_ID_OVERLAP;
sprintf(sql, "insert into user (id, pw) values ('%s', '%s')", id, pw);
mysql_query(connect_ptr, sql);
len = mysql_affected_rows(connect_ptr);
if(len == 1)
return true;
else
return false;
}
mysql_connect
およびmysql_query
実行が非常に良好です。
しかし、mysql_affected_rows
戻り値-1。
問題がどこにあるか私はdocumentationから....なぜmysql関数はC++で-1を返しましたか?
CはC++と同じではありません。どちらか1つを選択してください。 – jboockmann
そこには適切なSQLエスケープの恐ろしい欠点があり、このことはおそらく巨大な[SQLインジェクションホール](http://bobby-tables.com/)です。私はしばしばCコードでそれを見ることはありません。 – tadman
私は-1が選択クエリに対して正しいと思います。SELECTコマンドはどの行にも影響を与えません。したがって、別の関数がconnect_ptrから行数を取得する必要があります。実際には有効な結果が返されますが、実際に挿入されますか? – Marco