我一直在使用来自 http://zetcode.com/tutorials/mysqlcapitutorial/ 的 MySQL C API 教程以下示例工作正常:
#include <my_global.h>
#include <mysql.h>
int main(int argc, char **argv)
{
MYSQL *conn;
conn = mysql_init(NULL);
mysql_real_connect(conn, "localhost", "zetcode", "passwd", "testdb", 0, NULL, 0);
mysql_query(conn, "CREATE TABLE writers(name VARCHAR(25))");
mysql_query(conn, "INSERT INTO writers VALUES('Leo Tolstoy')");
mysql_query(conn, "INSERT INTO writers VALUES('Jack London')");
mysql_query(conn, "INSERT INTO writers VALUES('Honore de Balzac')");
mysql_query(conn, "INSERT INTO writers VALUES('Lion Feuchtwanger')");
mysql_query(conn, "INSERT INTO writers VALUES('Emile Zola')");
mysql_close(conn);
}
我如何更改代码以接受自定义值而不是硬编码值,是否可以替换 writers 和 ex. Leo Tolstoy 有字符指针之类的吗?
最佳答案
你基本上有两个选择:
- 您可以使用
sprintf
自行构建查询。那么你应该使用mysql_real_escape_string
在所有变量上,否则您的代码容易受到 SQL 注入(inject)攻击。 - 您可以使用 prepared statements .
mysql_stmt_execute
的文档有一些例子。 (这是更好的选择)
关于MySQL C API 自定义值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1599415/