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

时间:2015-01-29 15:40:17

标签: php pdo freetds

我想执行一些不返回结果集的查询,然后执行真正的查询,并获取其结果。 这是一个不起作用的例子:

<?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());
}

?>

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

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

  

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

这可能意味着您可以使用query()执行带有和不带结果的查询

答案 1 :(得分:0)

我知道这已经过时了,但对于其他人从Google发现这一点:您需要使用PDOStatement::nextRowset来迭代多个查询中的结果集。

但是,在某些版本中使用nextRowset和dblib时似乎存在内存问题(在我的情况下它尝试分配94Tb ......),所以我最终重新设计以避免多个SQL查询(而不是重复使用它的DECLARE的值。