Нет вывода из SQL Server 2005 T-SQL и PDO при использовании SET

Я подключаюсь к базе данных SQL Server 2005 с помощью PDO и не получаю вывод при выполнении определенных типов запросов с использованием PHP, но я получаю при выполнении запросов непосредственно в SQL Server Management Studio.

Когда я запускаю это:

$conn = new PDO(...);

$statement = $conn->prepare("DECLARE @testvar VARCHAR(10)
SELECT 'hello world'
");

$result = $statement->execute();

echo $result ? "Success" : "Failure";
echo "<br>";

print_r($conn->errorInfo());
echo "<br>";

die(print_r($statement->fetchAll()));

Я получаю вывод.

Success
Array ( [0] => 00000 [1] => 0 [2] => (null) [0] (severity 0) [] [3] => 0 [4] => 0 )
Array ( [0] => Array ( [] => hello world ) ) 1

Однако, если я изменю запрос, чтобы установить @testvar к чему-либо, либо встроенному:

DECLARE @testvar VARCHAR(10) = 'test'
SELECT 'hello world'

Или с помощью SET:

DECLARE @testvar VARCHAR(10)
SET @testvar = 'test'
SELECT 'hello world'

Я больше не получаю "hello world" при беге $statement->fetchAll()и, похоже, нет ошибки:

Success
Array ( [0] => 00000 [1] => 0 [2] => (null) [0] (severity 0) [] [3] => 0 [4] => 0 )
Array ( ) 1

Когда я пытаюсь выполнить все три запроса выше непосредственно в SQL Server Management Studio, все три из них работают и возвращаются "hello world" правильно.

1

Решение

Догадаться. С помощью SET (либо в соответствии с DECLARE или как явный SET) приводит к тому, что результаты теперь имеют более одного набора строк в терминах PDO. "hello world" Строка, которую я ищу, находится не в первом наборе строк.

Вместо этого:

die(print_r($statement->fetchAll()));

Итерация по всем наборам строк:

do {
print_r($statement->fetchAll());
echo "<br>";
}
while ($statement->nextRowset());

И теперь результат выглядит так:

Array ( ) // rowset 1
Array ( [0] => Array ( [] => hello world ) )  // rowset 2
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]