2011-05-09 16 views
0

我正在寫一個C程序與MySQL數據庫連接 和我在創造我的MySQL查詢困難......的MySQL和c - 使用可變查詢

我想你在一個變量整數我MySQL查詢,但我似乎無法得到正確的我...

我當前的查詢看起來像這樣...

mysql_query(conn, "INSERT INTO markerherkenning (MARKER_ID, DATETIME) values(1, CURRENT_TIME())"); 

我marker_ID值應該是一個變量的值,這樣我就可以減少我的代碼...

我已經使用這個指南,讓我去...... (http://zetcode.com/tutorials/mysqlcapitutorial)

感謝幫助

+0

你可以把它建成字符串嗎? (「+變量+」CURRENT_TIME())「 忘記如何在c中完成此操作,但那種事情 – Chris 2011-05-09 18:05:17

+0

@Chris:請不要暗示人們打開自己的SQL注入。 – geoffspear 2011-05-09 18:07:52

+0

@Wooble 你是什麼意思? – Chris 2011-05-09 18:14:07

回答

0

你必須MARKER_ID轉換爲字符串,然後將它附加到查詢的第一部分,並將filanny附加到其餘部分。

char *query = malloc(80); 
char num[11]; 

num = atoi(MARKER_ID);  

strcpy(query, "INSERT INTO markerherkenning ("); 
strcat(query, num); 
strcat(query, ", DATETIME) values(1, CURRENT_TIME())"); 
+0

你在第5行的末尾有語法錯誤。 – 2011-05-09 18:16:34

+0

@Bryan Drewery:是的,修正了它。謝謝:) – BlackBear 2011-05-09 18:18:22

+0

和我如何在我的mysql查詢中實現這個? mysql_query(conn,query); ? 我的程序崩潰@ char * num = atoi(var); – 2011-05-09 19:07:58

2

事情是這樣的:


sprintf(request, "INSERT INTO markerherkenning (%d, DATETIME) values(1, CURRENT_TIME())", marker_id); 

起初,你犯了一個字符串與sprintf的(或snprintf的)你的請求,然後將其用於SQL查詢。

1

如果您需要多次執行此操作,您可能需要使用prepared statement。這是一個更多的工作,但它會爲您帶來一些安全和性能。更何況,你不必一直在字符串和其他類型之間進行轉換。

+0

是的,但現在它是50行代碼...它將改變爲+100 ...所以我更喜歡改變:) – 2011-05-09 18:55:09

+0

@Jordi:* c'est la logiciel *。很明顯,有折衷;如果這是一款適合您自己娛樂的玩具應用程序,則可能不值得額外付出努力。如果這是要實現的目標,那麼你一定會爲此付出額外的努力。 – 2011-05-09 19:39:19