获取查询字符串,而不是在参数化查询中执行它

时间:2016-01-07 13:42:01

标签: php sqlsrv

出于调试目的,我喜欢获取将发送到sqlsrv并由sqlsrv执行的实际查询。但是我不知道如何。

示例:

$res = sqlsrv_query("SELECT * FROM some_table
    WHERE some_col = ? AND some_other_col = ?",
    array($_GET['some_val'], $_GET['some_other_val'])
);

我真正需要的是:

$sql = "SELECT * FROM some_table
    WHERE some_col = " . $_GET['some_val'] .
    " AND some_other_col = " . $_GET['some_other_val'];

然而,通过适当的逃避,然后我可以复制&粘贴到Microsoft SQL Server Management Studio

根据SO的一些提示,我们试图滥用mysql_real_escape_string,但不仅是不洁,它还需要一个活动的MySQL连接。我们的PHP安装已经弃用mysql_escape_string,因此我们也不想使用它。

/编辑: 再次,澄清一下:我想要一个SQL命令复制和粘贴,其中的问号由实际但正确(SQL-)引用的值扩展。 另外,我不想手工完成,因为a)通常容易出错,b)然后要么我没有保证,要么得到与服务器执行相同的查询,要么打开我的代码到当我发生错误时再次进行SQL注入。我不需要引用的SQL命令是HTML引用的(或者如果我需要它,我知道如何在字符串上使用htmlentites这样做)。

0 个答案:

没有答案