【发布时间】:2014-12-01 22:24:39
【问题描述】:
在尝试在 PHP (IIS/Windows) 中调用 sqlcmd 时,我一直在为此绞尽脑汁,但我完全不知道为什么它不起作用。
代码:
$sql = 'sqlcmd -S '.$serverName.' -d '.$databasename.' -U '.$userName.' -P '.$userPassword.' -q "exec GenerateInstallScript 123456890" -o C:\temp\sqlscripts.sql';
shell_exec($sql);
代码运行但没有生成任何东西
C:\温度
文件夹。我尝试从 start / run 手动运行它,它运行没有任何问题。我什至只尝试exec($sql),使用 sqlcmd 的完整绝对路径,尝试调用 cmd.exe,然后调用 sqlcmd,但到目前为止没有。
我还为该文件夹添加了 IUSR 完全权限和用户完全权限,以确保它不是来自 IIS 的权限,但仍然没有。
我还使用 proc mon 来查看它是否能告诉我任何信息,但我没有看到任何与 sqlcmd、cmd 或 php.exe 相关的信息(这将导致我找到一个原因 - 条目显示但只是标准调用条目)。
我对 PHP 和调用 SQLCMD 进行了大量搜索,但似乎大多数人调用的批处理文件中包含 sqlcmd。我不能在这里真正做到这一点,所以任何指导将不胜感激!
【问题讨论】:
-
您是否尝试过在
shell_exec函数中使用sqlcmd的绝对/完整路径? -
$sql = 'C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE -S '.$serverName.' -d '.$databasename.' -U '.$userName.' -P '.$userPassword.' -q "exec GenerateInstallScript 123456890" -o C:\temp\sqlscripts.sql'; shell_exec($sql); 我跑了上面,没有输出。我什至尝试使用 \\ 仍然没有。谢谢!
-
您是否尝试查看 $sql 包含的内容以及是否正确?您是否尝试过像 shell_exec 一样在命令行上运行的命令?
-
您是否检查过您没有使用安全模式? php.net/安全模式
-
我刚刚调试了代码以获取 $sql 中的数据,并且能够通过命令运行它。需要注意的一点是,当我运行它时,出现了 UAC 提示。这可能是限制它的原因吗?编辑:我检查并安全模式设置为关闭。
标签: php exec shell-exec sqlcmd