2017-10-16 55 views
0

我试图运行MSSQL Server上下面的查询,使用Doctrine DBAL:发行教义DBAL和SQL变量

$sql = "declare @new_id_num int; 
     set @new_id_num = 111111; 
     select @new_id_num as [ID_NUM];"; 

$statement = $conn->prepare($sql); 
$statement->execute(); 
$newIDNum = $statement->fetchAll(); 

然而,所有我越来越早在$ newIDNum是一个空数组。
我不知道该怎么做 - 查询在正常的SQL控制台中运行良好。 跟踪看起来不错 - 你可以看到正在运行的正确查询。

我想我错过了一些简单的东西?

+0

我会_guess_的第一件事情是发生调用nextRowset()是'SET @new_id_num = 111111;'被算作一个结果集。避免这种情况的一种方法是在查询开始时使用'SET NOCOUNT ON;'。你可以测试这种方法的一个方法是看看执行后获取正确结果(或任何相当于你,我不知道如何学说是如何工作的,但我认为它使用PDO语法中的$ statement-> nextRowset(); PHP)。 – ZLK

回答

0

ZLK是正确的,它返回多个行集。
但是,不能直接从DBAL语句调用 - > nextRowset()。 你必须让底层的PDO声明,并就

$statement->getWrappedStatement()->nextRowset(); 
$newIDNum = $statement->fetchAll();