我在尝试使用PHP PDO在MSSQL2000上运行存储过程时遇到问题。我已经尝试了所有组合,但除了无效的游标状态错误之外,无法获得任何结果。
该过程位于另一个应用程序使用的数据库中。我只是伸手去抓取信息,以便在PHP上显示。因此,修改存储过程(甚至改为SET NOCOUNT ON)是禁止的。
存储过程有两个参数 - 开始日期和结束日期。还有一个RETURN_VALUE参数。
我可以在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);
我得到了一个PDO Expection:'stmt-> fetch()行上的'无效游标状态'。
$stmt = $dbConn->prepare($sql);
$stmt->execute();
$data = $stmt->fetch();
print_r($data);
仍然得到一个PDO Expection:'无效的游标状态'。必须与fetch有关。尝试别的东西:
$data = array();
do {
$results[count($results)] = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
while($stmt->nextRowset());
仍然没有!?有什么想法吗?
UPDATE1:
尝试了另一种方法:
$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();
但两者都给我一个'无效的转换规范字符值'错误消息。用我自己和新建议的日期格式试了一下。
如果我使用与存储过程使用的表中相同的日期格式:
$startdate = "2015-08-11 09:42:18.890";
我收到“无效的游标状态”错误消息。我希望这更近一步了?