解决方案:我只是想提供有关如何解决此问题的更新。虽然我可以直接在 R 控制台中查询 SQL,但 PHP 没有与 SQL Server 的连接,并且一旦它遇到 R 的 sqlQuery() 就会停止在 R 中运行我的脚本。在使用 PHP 中的 sqlsrv_connect() 建立连接并在连接字符串中明确说明 SQL Server 身份验证凭据后,我能够使其正常工作。
“我正在尝试从 PHP 执行一个 R 脚本,该脚本应该运行一个存储过程,该过程将更新 SQL Server 2005 数据库中的表。我添加了一些 print() 行以查看脚本停止运行的位置并执行一切都直到 sqlQuery 函数。但是,当我在 R 控制台中运行它时,它工作正常。我的 R 脚本如下:
args <- commandArgs(TRUE)
X <- args[1]
sink("test.txt")
library(RODBC)
conn<-odbcDriverConnect('driver={SQL SERVER};server=server;database=database;trusted_connection=true')
print(conn)
print(X)
sqlQuery(conn,paste("EXEC sp.usp_Stored_Procedure @Test='",X,"', @Test2='Y', @Test3='Z'",sep=""))
print(X)
当我通过 PHP 传递参数“面包”时,R 脚本将运行并使用以下值创建“test.txt”文件:
[1] -1 [1] “面包”
所以我至少知道连接已经建立并且它一直执行到 sqlQuery()。同样,这直接在 R 控制台中运行得很好,所以我想知道当我尝试从 PHP 执行 R 脚本时它在哪里丢失了。我正在运行 Windows 7,并使用 Windows 身份验证连接到 SQL Server。
编辑:这是 PHP 脚本:
echo "<form action='rfile.php' method='get'>";
echo "Enter name: <input type='text' name='X' />";
echo "<input type='submit' />";
echo "</form>";
if(isset($_GET['X']))
{
$X = $_GET['X'];
exec("C:\wamp\www\R\R-2.15.2\bin\Rscript em.R $X");
$indsc = file_get_contents('test.txt');
echo $indsc;
}
?>
在前端执行时,$indsc 可以正常返回 'test.txt' 文件的值,但 R 脚本中 sqlQuery() 之后的所有内容除外。”