【问题标题】:Run stored procedure for each val in array为数组中的每个值运行存储过程
【发布时间】:2023-04-01 01:23:01
【问题描述】:

我无法理解这个..

我有两个独立的存储过程,我们称之为:

createTable (takes a varchar userID as input)
runReport (takes two dates for input, as varchar)

createTable 创建一个名为##tempTable 的虚拟表(如果它不存在并添加提供的用户ID)。所以如果我跑

EXEC createTable 'user-32'
EXEC createTable 'user-33'
EXEC createTable 'user-34'

然后我在##tempTable 中有这些ID。

之后我想运行这个:

 EXEC runReport '2011-01-01', '2011-10-01'

这应该会给我一个很好的输出。 问题是这样运行时它可以完美运行:

 mssql_query("EXEC createTable 'user-32'");
 mssql_query("EXEC createTable 'user-33'");
 mssql_query("EXEC createTable 'user-34'");
 mssql_query("EXEC runReport '2011-01-01', '2011-10-01'");

但是当我尝试循环出 createTable-lines 时,runReport-SP 不返回任何数据。

例子:

$userIDs = explode(',', $userID_str);
foreach ($userIDs as $user) {
  if (mb_strlen($user) > 0) {
    mssql_query("EXEC createTable '$user'");
  }
}

我想知道这是否与断开连接或其他什么有关?似乎 runReport-SP 可以找到#tempTable,但是当我使用循环时它无法从中读取。

有什么想法吗?

谢谢! :)

【问题讨论】:

  • $userID_str 长什么样子?
  • 只是一个字符串,像这样:user-31,user-32,user-33
  • 你确定mb_strlen($user) > 0 会评估为 TRUE 吗?
  • 嗯,你有什么错误吗?一些警告?确保你在脚本的开头(或在你的索引、init 或 config.php)有这个:ini_set('display_errors', E_ALL);error_reporting(E_ALL);。也尝试 var_dump mssql_query() 返回值,无论它没有返回 FALSE ...

标签: php sql-server stored-procedures loops foreach


【解决方案1】:

那么以这种方式调用你的程序怎么样:

$conn = mssql_connect(...);
$stmt = mssql_init("createTable", $conn);
foreach ($userIDs as $user) {
    if(mb_strlen($user) > 0) {
        mssql_bind($stmt, "@userID", &$user, SQLVARCHAR);
        mssql_execute($stmt);
    }
}

$stmt = mssql_init("runReport", $conn);
mssql_bind($stmt, "@date1", "2011-01-01", SQLVARCHAR);
mssql_bind($stmt, "@date2", "2011-01-01", SQLVARCHAR);
$result = mssql_execute($stmt);
print_r(mssql_fetch_array($result));

?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 2016-10-11
    • 2023-04-07
    • 2022-12-06
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    相关资源
    最近更新 更多