如何使用 PDO for Sql Server 执行多个查询

问题描述 投票:0回答:3

我想执行一些不返回结果集的查询,然后执行一个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());
}

?>

感谢您的帮助

php pdo freetds
3个回答
1
投票

我知道这已经很旧了,但对于从 Google 找到此内容的其他人来说:您需要使用 PDOStatement::nextRowset 来迭代多个查询的结果集。

但是,在某些版本中将 nextRowset 与 dblib 一起使用时似乎存在内存问题(在我的情况下它尝试分配 94Tb...),因此我最终重新设计以避免完全避免多个 SQL 查询(而不是重复声明它的使用地点)。


0
投票

PDO::query 文档(http://php.net/manual/it/pdo.query.php)说

PDO::query() 在单个函数调用中执行 SQL 语句,并将该语句返回的结果集(如果有)作为 PDOStatement 对象返回。

这可能意味着您可以使用

query()
执行带结果和不带结果的查询


0
投票

似乎pdo_dblib query()只允许一条sql语句,可以是有结果或无结果的查询,但它不支持两条sql语句。

© www.soinside.com 2019 - 2024. All rights reserved.