Tag: mysql

在C中防止SQL注入

我正在编写一个C应用程序,它接受一些用户输入并执行一些数据库查询。 我很清楚SQL注入的风险,并希望防止它。 理想情况下,我会使用参数化查询,但到目前为止无法在C中找到任何具有此function的内容。 我目前正在构建我的查询: char *query; asprintf(&query, “UPDATE SomeTable SET SomeField=’%s’;”, userInput); 如果我无法做到这一点,那么我必须过滤用户输入。 该过滤应如何进行? 是否足以删除所有的和?(有效输入不能包含它们)。如果是这样,在C中执行此操作的最简单方法是什么?

与MySQL服务器通信的最佳方式是什么?

我将使用C / C ++,并想知道与MySQL服务器通信的最佳方式。 我应该使用服务器安装附带的库吗? 它们是否是我应该考虑的优秀图书馆而不是官方图书馆?

MySQL:如何以编程方式确定外键关系?

类似于这个问题,但对于MySQL …. 如何以编程方式确定MySQL中的外键引用(假设InnoDB)? 我几乎可以得到它们: SHOW TABLE STATUS WHERE Name = ‘MyTableName’; …但是,似乎包含一些此信息的注释列被截断,所以我不能依赖它。 必须有其他方式…… 我对C API调用,SQL语句,任何事情感到满意 – 我只需要一些能够持续工作的东西。 注意:我还考虑过解析“SHOW CREATE TABLE MyTableName”语句的结果,但我真的希望有更简单的东西。

如何同时从多个线程访问MySQL

我们正在做一个MySQL的小基准测试,我们希望看看它对我们的数据的执行情况。 该测试的一部分是看多个并发线程使用各种查询来破坏服务器时它是如何工作的。 MySQL文档 (5.0)对multithreading客户端并不十分清楚。 我应该指出我确实链接了线程安全库( libmysqlclient_r.so ) 我正在使用预处理语句并执行read(SELECT)和write(UPDATE,INSERT,DELETE)。 我应该为每个线程打开一个连接吗? 如果是这样的话:我怎么做呢…似乎mysql_real_connect()返回我调用mysql_init()时得到的原始数据库句柄 如果没有:我如何确保结果和方法,如mysql_affected_rows返回正确的值,而不是与其他线程的调用冲突(互斥/锁可以工作,但感觉不对)