2014-09-24 36 views
0

我试图打印由OCI_Prepare函数生成的sql语句的字符串值,问题是绑定参数的值没有打印出来。如何使用OCI_GetSql函数打印完整的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列1 =:Column1Value

我怎样才能打印最终的SQL语句?

回答

1

这是最后的声明。在准备好的语句中,参数与查询分开并由数据库引擎单独处理,所以我们得到了SQL注入保护和处理加速,因为引擎不需要重新解析仅在参数上不同的查询。

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