我不明白PDO关于存储过程的行为,我需要一些解释(也许解决我的问题)。为什么我需要使用存储过程的PDOStatement :: nextRowSet来获取结果?
我使用SQL Server 2008 R2与PHP 5.4和Apache 2.2。 我打电话使用PDO(带司机SQLSRV)有两个参数的存储过程:
$pdoStmt = $pdo->prepare('MY_STORED_PROCEDURE ?, ?');
$pdoStmt->bindValue(1, 'MyValue1', PDO::PARAM_STR);
$pdoStmt->bindValue(2, 'MyValue2', PDO::PARAM_STR);
$pdoStmt->execute();
好了,在这里,一切都完美的作品。所调用的存储过程的结果是一个数组,所以我应该使用fetchArray()。所以我这样做:
$result = $pdoStmt->fetchArray();
但是结果是空的。我不知道为什么,我必须拨打几个时间nextRowSet()才能得到结果。所以我这样做:
do {
$result = $pdoStmt->fetchAll(PDO::FETCH_ASSOC);
} while ($pdoStmt->nextRowSet());
然后我有我的结果! Yay ....
当我直接在SQL Server中执行存储过程(我有一个正确的结果与相同的参数)存储过程。
那么为什么我必须这样做,有没有解决方案呢?我不想拨打nextRowSet()什么也没有...
在此先感谢您的回复。
感谢您的答复!我试过但仍然是,我有同样的行为。 – 2014-10-17 16:17:57
@VincentNicopolsky你的程序包含多少个sql语句?如果有多个,你只需要'nextRowSet()'。 – jeroen 2014-10-17 16:21:17
有条件检查参数是否为空。如果它是空的,我做一个'SELECT'FALSE'AS RESULT',否则我做一个'SELECT R1,R2 FROM MyTable WHEN R1 = @ MyValue1 AND R2 = @ MyValue2'。 只有这个: - / – 2014-10-17 16:43:16