2017-10-16 32 views
0

je tente d'exécuter la requête suivante sur MSSQL Server, en utilisant Doctrine DBAL:Problème avec la doctrine Dbal et variables 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(); 

Cependant, tout ce que je suis en revenir newIDNum $ est un tableau vide.
Je ne sais pas quoi en faire - la requête s'exécute correctement dans une console SQL normale. Trace semble bien - vous pouvez voir la requête correcte en cours d'exécution ..

Je imagine qu'il me manque quelque chose de simple?

+0

La première chose que je _guess_ se passe est que 'SET @new_id_num = 111111;' est compté comme un jeu de résultats. Une façon d'éviter cela serait d'utiliser 'SET NOCOUNT ON;' au début de votre requête. Une façon de tester cela est de voir si '$ statement-> nextRowset();' après l'exécution récupère le résultat correct (ou quel que soit l'équivalent pour vous, je ne suis pas sûr du fonctionnement de la doctrine mais je suppose qu'elle utilise la syntaxe PDO PHP). – ZLK

Répondre

0

ZLK avait raison de renvoyer plusieurs ensembles de lignes.
Toutefois, vous ne pouvez pas appeler -> nextRowset() directement à partir de l'instruction DBAL. Vous devez obtenir la déclaration PDO sous-jacente, et appelez nextRowset() sur ce

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