我想执行一些不返回结果集的查询,然后执行真正的查询,并获取其结果。 这是一个不起作用的例子:
<?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());
}
?>
感谢您的帮助
答案 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的值。