我試圖根據我在網上找到的這個例子建立一個準備好的聲明。 我只是想防止在grade =和username =中進行sql注入,但是語句沒有執行。如何在C中爲mysql查詢設置預準備語句?
MYSQL_STMT *stmt;
MYSQL_BIND bind[2];
char* usrname = &uname[0]; //uname supplied by user
char* choi = choice; //choice supplied by user
stmt = mysql_stmt_init(connect);
char* statement = "UPDATE grades SET grade='?' WHERE username='?'";
mysql_stmt_prepare(stmt, statement, strlen(statement));
memset(bind,0,sizeof(bind));
bind[0].buffer_type=MYSQL_TYPE_STRING;
bind[0].buffer=usrname;
bind[0].buffer_length=50;
bind[0].is_null=0;
bind[0].length= strlen(usrname);
bind[1].buffer_type=MYSQL_TYPE_STRING;
bind[1].buffer=choi;
bind[1].buffer_length=50;
bind[1].is_null=0;
bind[1].length= 2;
mysql_stmt_bind_param(stmt, bind);
mysql_stmt_execute(stmt);
我不能肯定,關於MySQL,但在一些的DBMS,在''應該是* *加引號,就像'用戶名='? –
我嘗試過並收到了seg故障。 – Takkun
您可能需要仔細檢查'bind'設置,例如順序似乎倒退,緩衝區大小可能需要雙重檢查。 –