0

我想使用 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 与 C++ mysql 连接器 api 的区别吗?

4

1 回答 1

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 的一部分,这是唯一的区别。

于 2013-08-22T10:42:50.407 回答