【问题标题】:Using PHP and calling sqlcmd使用 PHP 并调用 sqlcmd
【发布时间】: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


【解决方案1】:

这是一个可能的想法,使用批处理脚本为您完成工作,如下所示:

sqlcmd.bat

@ECHO OFF
cd /D "C:\Program Files\Microsoft SQL Server\100\Tools\Bin\"
sqlcmd -S %1 -d %2 -U %3 -P %4 -q "exec GenerateInstallScript 123456890" -o C:\temp\sqlscripts.sql

然后像这样使用 php 调用这个批处理脚本:

test.php

<?php

$serverName = 'xyz';
$databasename = 'xyz';
$userName = 'xyz';
$userPassword = 'xyz';

shell_exec("sqlcmd.bat $serverName $databasename $userName $userPassword");

echo 'Done';

?>

【讨论】:

  • 我检查并修改了我的代码并将 .bat 文件添加到我的 web 目录的根目录中,但没有创建 sqlscripts.sql 文件。有没有可能是权限?感谢您迄今为止的帮助!
【解决方案2】:

我没有在网上找到解决方案,所以我想我可以移植这个以防万一有人需要...

有些东西告诉 php 用户,他们不允许专门运行“SQLCMD.EXE”。我只是没有找到时间去找出那是什么,所以我绕过它......

查找、复制和重命名... SQLCMD.rll ……到这…… ss_sql.rll

查找、复制和重命名... SQLCMD.exe ……到这…… ss_sql.exe

现在它可以工作了……至少对我来说:)

HTH

【讨论】:

    猜你喜欢
    • 2012-10-20
    • 2011-11-01
    • 1970-01-01
    • 2017-12-01
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    相关资源
    最近更新 更多