PHP PDO MSSQL存储过程

PHP PDO MSSQL存储过程,php,stored-procedures,pdo,odbc,Php,Stored Procedures,Pdo,Odbc,我在尝试使用PHP PDO在MSSQLS2000上运行存储过程时遇到问题。我已经尝试了所有的组合,但除了无效的游标状态错误之外,无法得到任何结果 该过程位于另一个应用程序使用的数据库中。我只是把手伸进它里面,把信息拉出来显示在PHP上。因此,修改存储过程(甚至改为设置NOCOUNT ON)是不可能的 存储过程有两个参数—开始日期和结束日期。还有一个返回值参数 我可以在SQL查询分析器中运行以下命令并转储数据行: EXEC [availability_enquiry] '08-24-2015 0:

我在尝试使用PHP PDO在MSSQLS2000上运行存储过程时遇到问题。我已经尝试了所有的组合,但除了无效的游标状态错误之外,无法得到任何结果

该过程位于另一个应用程序使用的数据库中。我只是把手伸进它里面,把信息拉出来显示在PHP上。因此,修改存储过程(甚至改为设置NOCOUNT ON)是不可能的

存储过程有两个参数—开始日期和结束日期。还有一个返回值参数

我可以在SQL查询分析器中运行以下命令并转储数据行:

EXEC [availability_enquiry] '08-24-2015 0:0:0.000', '08-26-2015 0:0:0.000'
看起来很直截了当,但当我尝试编写并运行它时,我什么也得不到:

$dbConn = null;
$connectionString = sprintf('%s:Driver=%s;Server=%s;Database=%s;TrustedConnection=yes;', 'odbc', '{SQL Server Native Client 10.0}', 'mypc', 'testdb');
$dbConn = new PDO($connectionString, 'root', '123qew');
$dbConn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql = "EXEC [availability_enquiry] '08-24-2015 0:0:0.000', '08-26-2015 0:0:0.000'";
$stmt = $dbConn->query($sql, PDO::FETCH_ASSOC);
$data = $stmt->fetch();
print_r($data); 
我在$stmt->fetch()行上得到一个PDO预期值:“无效的游标状态”

仍然会得到一个PDO期望值:“无效的游标状态”。一定是跟取货有关。试试别的:

$data = array();
do {
  $results[count($results)] = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
while($stmt->nextRowset());
还是没什么!?有什么想法吗


更新1:

尝试了另一种方法:

$sql = "{CALL availability_enquiry (:startdate, :enddate)}";
$stmt = $dbConn->prepare($sql);
$startdate = "2015-08-24T00:00:00";
$enddate = "2015-08-26T00:00:00";
$stmt->execute(array(
  ':startdate'=>$startdate,
  ':enddate'=>$enddate
));
$data = $stmt->fetch();
print_r($data); 
还尝试了以下方式:

$startdate = "2015-08-24T00:00:00";
$stmt->bindParam(':startdate', $startdate, PDO::PARAM_STR);
$enddate = "2015-08-26T00:00:00";
$stmt->bindParam(':enddate', $enddate, PDO::PARAM_STR);
$stmt->execute();
但两者都给我一个“cast规范的字符值无效”错误消息。用我自己的和新建议的日期格式试过了

如果我使用存储过程使用的表中的相同日期格式:

$startdate = "2015-08-11 09:42:18.890";

我收到一条“无效光标状态”错误消息。我希望这能更进一步?

试试
EXEC[dbo].[availability\u inquiry]“2015-08-24T00:00:00”,“2015-08-26T00:00:00”
对不起,没用?虽然我做了一些进一步的测试,并在上面添加了更新1。您的想法?请尝试执行[dbo].[availability\u Inquiry]'2015-08-24T00:00:00'、'2015-08-26T00:00:00'对不起,没有用?虽然我做了一些进一步的测试,并在上面添加了更新1。你的想法?
$startdate = "2015-08-11 09:42:18.890";