为数组中的每个val运行存储过程

时间:2011-10-10 11:29:45

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

无法绕过这一个......

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

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

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

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但是当我使用循环时它无法读取它。

有什么想法吗?

谢谢! :)

1 个答案:

答案 0 :(得分:0)

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

$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));