Я хотел бы выполнить некоторые запросы, которые не возвращают набор результатов, а затем выполняют реальный запрос и извлекают его результат. Вот пример, который не работает:
<?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());
}
?>
Спасибо за вашу помощь
Я знаю, что это старо, но для других людей, находивших это от Google: вам нужно использовать PDOStatement :: nextRowset для повторения наборов результатов из ваших нескольких запросов.
Тем не менее, кажется, что есть проблемы с памятью при использовании nextRowset с dblib в некоторых версиях (он пытался выделить 94Tb в моем случае...), поэтому я закончил реинжиниринг, чтобы избежать множественных SQL-запросов вообще (вместо этого дублирование значения DECLARE, где он использовался).
PDO :: query docs (http://php.net/manual/it/pdo.query.php) говорят
PDO :: query() выполняет оператор SQL в одном вызове функции, возвращая набор результатов (если он есть), возвращаемый оператором как объект PDOStatement.
Это может означать, что вы можете выполнить с query()
оба запроса с результатом и без него