如何使用OCI_GetSql函数打印完整的SQL语句?

时间:2014-09-24 12:22:48

标签: c++ mysql oci

我正在尝试打印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语句?

1 个答案:

答案 0 :(得分:1)

这是最后的陈述。在预处理语句中,参数与查询分离并由数据库引擎分别处理,因此我们可以获得sql注入保护和处理速度,因为引擎不需要重新解析仅在参数方面不同的查询。

不幸的是,没有内置方法可以将格式化的参数绑定到ocilib中的语句。但是你可以很容易地找到其他人的实现,例如看看ido2db_oci_print_binds。希望这会有所帮助。