Я подключаюсь к базе данных 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"
правильно.
Догадаться. С помощью 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
Других решений пока нет …