2013-08-22 69 views
0

我想用mysql_real_escape_string處理撇號,反斜線等我搜索,發現這個功能的MySQL/C++接口mysql_real_escape_string功能

unsigned long mysql_real_escape_string(MYSQL *mysql, 
    char *to, const char *from, unsigned long length) 

但這需要MYSQL *,但我用這個代碼連接:

 sql::Driver *driver; 
     sql::Connection *con; 
     sql::Statement *stmt; 


     // Create a connection 
     driver = get_driver_instance(); 
     con = driver->connect("tcp://127.0.0.1:3306", "root", "anubha"); 
     con->setSchema("db"); 
     stmt = con->createStatement(); 

所以,如果我沒有一個MYSQL * mysql對象作爲函數需要。 如果我做連接是這樣的:

  MYSQL* conn = mysql_init(NULL); 
      mysql_real_connect(conn,"tcp://127.0.0.1:3306", "root", 
      "anubha", "db" ,0,NULL,0); 

然後,因爲我有MYSQL *對象,我可以使用的功能,但我應該改變連接代碼只是爲了使用此功能。沒有其他功能可用嗎?還有兩種連接方式有什麼區別,是C vs C++ mysql connector api的區別?

回答

3

您可能需要使用準備好的查詢與C++接口:

sql::Connection *con; 
sql::PreparedStatement *prep_stmt 
// ... 

prep_stmt = con->prepareStatement("INSERT INTO test(id, label) VALUES (?, ?)"); 

prep_stmt->setInt(1, 1); 
prep_stmt->setString(2, "a"); 
prep_stmt->execute(); 

prep_stmt->setInt(1, 2); 
prep_stmt->setString(2, "b"); 
prep_stmt->execute(); 

delete prep_stmt; 
delete con; 

http://dev.mysql.com/doc/refman/5.1/en/connector-cpp-examples-prepared-statements.html

而且,是的,mysql_real_*是C連接器的API的一部分,它是唯一的區別。

+0

將使用prepareStatement處理轉義字符,如'\ etc? – Anubha

+0

是的,它會的。 http://www.theserverside.com/news/1365244/Why-Prepared-Statements-are-important-and-how-to-use-them-properly –

+0

它顯示警告prep_stmt'具有不完整的類型[默認情況下啓用]並在我使用prep_stmt行錯誤:錯誤:無效使用不完整類型'類SQL :: PreparedStatement' – Anubha