出于调试目的,我喜欢获取将发送到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这样做)。