是否可以对任何语句字符串使用预准备语句?
Is it possible to use prepared statements for any statementstring?
目前我使用预准备语句来做这样的事情:
driver = get_driver_instance();
con = driver->connect("tcp://127.0.0.1:3306", "root", "root/");
con->setSchema("unknown_project");
query = "SELECT username FROM `unknown_project`.`users` WHERE accesslevel = ?;";
pstmt = con->prepareStatement(query);
pstmt->setInt(1, 5);
std::string tmp;
res = pstmt->executeQuery();
while (res->next()) {
tmp = res->getString(1);
results.push_back(tmp);
}
for (auto dummy : results) {
std::cout << dummy << std::endl;
}
我现在的问题是,是否可以将预准备语句用于以下(非工作,我没有得到回报(示例?
driver = get_driver_instance();
con = driver->connect("tcp://127.0.0.1:3306", "root", "root");
con->setSchema("unknown_project");
query = "SELECT username FROM `unknown_project`.`users` WHERE ? = ?;";
pstmt = con->prepareStatement(query);
pstmt->setString(1, "accesslevel"); // use accesslevel
pstmt->setInt(2, 5);
std::string tmp;
res = pstmt->executeQuery();
while (res->next()) {
tmp = res->getString(1);
results.push_back(tmp);
}
for (auto dummy : results) {
std::cout << dummy << std::endl;
}
预准备语句用于值,它是防止SQL注入的安全方法。
任何有界参数都作为单个值受到威胁,并且不能是其他东西。 其他SQL注入仍然是可能的。
例如: 在没有参数绑定的情况下,使用 concat 字符串,您可以执行以下操作:
Query = "Select * from A where key=" + "1 union all select * from passwords"
但是使用参数绑定,整个添加将作为单个值受到威胁:
Query = "Select * from A where key=?"
因此,具有相同字符串值的绑定字符串将给出:
Query = "Select * from A where key='1 union all select * from password'"
将自动添加周围的单引号,并转义任何特殊字符。例如:单个 qoute ('( 转到 (''( 所以 整个添加作为单个值受到威胁,除了一个值之外,您不能添加任何内容。
相关文章:
- Switch 语句(字符串)一直选择默认值,除非其为零
- 有没有办法在C++将字符串与开关语句一起使用?
- 我如何将 OR 与 if 语句一起使用字符串
- PostgresSQL - SQL Ready 语句与字符串转义,防止 SQL 注入攻击
- C++ 虽然语句不适用于字符串和"or"
- 这两个C++语句连接字符串有什么区别?
- 不能在 if 语句 - c++ 中使用 void func 直接将字符串转换为大写
- 有没有办法我可以在 C++ 中使用 if 语句来说明如果一个字符串不是两个名称的 eqal,它会给出一个输出,ATM i
- 如果语句错误地读取字符串,则始终在第一个条件返回
- 当我的 if 语句在字符串中找到空格时,在无限循环中切换
- 尝试使用 indexOf 创建一个 if 语句来检查字符串是否包含字符.有一点麻烦
- 是否可以对任何语句字符串使用预准备语句?
- 为什么我的 if 语句不适用于 c++ 中的字符串?
- 是什么使这个以'+'开头的字符串添加成为有效的语句?
- scanf() 语句中"%*[^n]"的格式字符串指示什么?分配抑制器 (*) 和否定扫描集 ([^) 如何协同工作?
- 如何比较if语句中的字符串?
- C++字符串和 while 语句的问题
- 与 IF 语句C++的字符串比较?
- 使用 if 语句C++字符串变量
- QSqlQuery:在执行之前获取准备好的语句字符串