php - 从 PHP 调用时,R 脚本未完成执行 - 尝试运行 RODBC 的 sqlQuery 函数时停止

标签 php sql r

解决方案:我只是想提供有关如何修复此问题的最新信息。虽然我可以直接在 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 传递参数“bread”时,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() 之后的所有内容除外。”

最佳答案

我相信您在从 PHP 运行 R 脚本时遇到了与我相同的问题。首先,确保从 PHP 调用 R 时按以下方式执行:

exec('"C:\Program Files\R\R-3.0.1\bin\Rscript.exe" "myrscript.r" 2>&1', $output);

注意“2>&1” - 这允许 PHP 收集 $output 中发生的任何错误 - 否则它们会丢失。然后,您可以使用 print_r($output) 打印出 $ouput,以查看 R 生成的任何反馈/错误。这应该提供一些有关运行脚本时出现故障的线索。

我认为发生的情况是对“库(ODBC)”的调用失败。我不知道为什么,但当我从 PHP 调用时也这样做时,它似乎总是失败。为了解决这个问题,我在 R 脚本中这样做了:

library(ODBC, lib.loc = "path/to/r/library/root/folder")

lib.loc 告诉 R 到底在哪里可以找到 ODBC 库。这应该可以解决问题。

附注在我的系统上,R 库根文件夹的路径是“C:/users/myusername/Documents/R/win-library/3.0”。

关于php - 从 PHP 调用时,R 脚本未完成执行 - 尝试运行 RODBC 的 sqlQuery 函数时停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19407924/

相关文章:

MySQL : How to identify users I follow or follow me from other person's followers?

java - 如何在Java中保存每个字段的变量查询结果?

sql - 将日期透视为行

php - 我不懂路由

php - 提交成功但上传无法在合并表单中工作

RStudio - 崩溃后如何恢复数据?

r - 无法在 WSL Ubuntu 18.04 上安装 R Shiny Server

R CMD 构建 : file DESCRIPTION does not exist

php - mysql_data_seek pdo 等效项

php - 如何在 Drupal 中获取用户的配置文件路径?