我想执行一些不返回结果集的查询,然后执行一个real查询,并获取其结果。 这是一个不起作用的示例:
<?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 查询(而不是重复声明它的使用地点)。
PDO::query 文档(http://php.net/manual/it/pdo.query.php)说
PDO::query() 在单个函数调用中执行 SQL 语句,并将该语句返回的结果集(如果有)作为 PDOStatement 对象返回。
这可能意味着您可以使用
query()
执行带结果和不带结果的查询
似乎pdo_dblib query()只允许一条sql语句,可以是有结果或无结果的查询,但它不支持两条sql语句。