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