Как выполнить несколько запросов, используя PDO для Sql Server

Я хотел бы выполнить некоторые запросы, которые не возвращают набор результатов, а затем выполнить реальный запрос и получить его результат.
Вот пример, который не работает:

<?php

try {
$db = new PDO('dblib:host=myhost;dbname=master','user','password');$query = "declare @entier int = 1;";
$db->exec($query);
$query = "select @entier;";
$stmt = $db->query($query);
$rows = $stmt->fetchAll();
print_r($rows);
}
catch (PDOException $e) {
print ($e->getMessage());
}
catch (Exception $e) {
print ($e->getMessage());
}

?>

Этот код также не работает:

try {
$db = new PDO('dblib:host=myhost;dbname=master','user','password');

$query = "declare @entier int = 1; select @entier;";
$stmt = $db->query($query);
$rows = $stmt->fetchAll();
print_r($rows);
}
catch (PDOException $e) {
print ($e->getMessage());
}
catch (Exception $e) {
print ($e->getMessage());
}

?>

Но этот код работает:

<?php

try {
$db = new PDO('dblib:host=myhost;dbname=master','user','password');

$query = "select 1;";
$stmt = $db->query($query);
$rows = $stmt->fetchAll();
print_r($rows);
}
catch (PDOException $e) {
print ($e->getMessage());
}
catch (Exception $e) {
print ($e->getMessage());
}

?>

Спасибо за вашу помощь

0

Решение

PDO :: запрос документов (http://php.net/manual/it/pdo.query.php) сказать

PDO :: query () выполняет оператор SQL в одном вызове функции, возвращая набор результатов (если таковой имеется), возвращенный оператором, как объект PDOStatement.

Это может означать, что вы можете выполнить с query() оба запроса с и без результата

0

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

Я знаю, что это старый, но для других людей, которые находят это в Google: вам нужно использовать PDOStatement :: nextRowset перебрать наборы результатов из ваших нескольких запросов.

Тем не менее, кажется, что есть проблемы с памятью при использовании nextRowset с dblib в некоторых версиях (в моем случае он пытался выделить 94Tb …), поэтому я закончил реинжиниринг, чтобы избежать нескольких SQL-запросов в целом (вместо дублирования значения ОБЪЯВЛЯЙТЕ, где оно использовалось).

0

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