我正在尝试打印OCI_Prepare
函数生成的sql语句的字符串值,问题是不打印绑定参数的值。
我的代码:
OCI_Prepare (mStatement, "DELETE FROM MyTable WHERE Column1 = :Column1Value");
OCI_BindString(mStatement, ":Column1Value", myBuffer, 30);
OCI_Execute(mStatement);
std::string sqlstr = OCI_GetSql(mStatement);
printf("sql: %s\n", sqlstr.c_str());
OCI_Commit(cn);
输出:
sql:DELETE FROM MyTable WHERE Column1 =:Column1Value
如何打印最终的SQL语句?
答案 0 :(得分:1)
这是最后的陈述。在预处理语句中,参数与查询分离并由数据库引擎分别处理,因此我们可以获得sql注入保护和处理速度,因为引擎不需要重新解析仅在参数方面不同的查询。
不幸的是,没有内置方法可以将格式化的参数绑定到ocilib中的语句。但是你可以很容易地找到其他人的实现,例如看看ido2db_oci_print_binds。希望这会有所帮助。