首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PDO对一个请求执行未缓冲的查询

使用PDO对一个请求执行未缓冲的查询
EN

Stack Overflow用户
提问于 2014-01-09 15:21:57
回答 5查看 8.3K关注 0票数 5

我希望只对一些请求执行未缓冲的查询。

在mysql中,我是这样做的:

代码语言:javascript
复制
$req = mysql_unbuffered_query('SELECT * FROM forum_topics
ORDER BY (topic_id/topic_stick) DESC, topic_last_post DESC');
while($data = mysql_fetch_assoc($req)) {
   // display results...
}

我查看了php,根据它在pdo中的应用,我们必须这样做才能完成未缓冲的查询:

代码语言:javascript
复制
$pdo = new PDO("mysql:host=localhost;dbname=world", 'my_user', 'my_pass');
$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);

$uresult = $pdo->query("SELECT Name FROM City");

if ($uresult) {
   while ($row = $uresult->fetch(PDO::FETCH_ASSOC)) {
       echo $row['Name'] . PHP_EOL;
   }
}

但是,是否可以只对"forum_topics“表结果进行非缓冲,而不将所有pdo实例设置为非缓冲?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-01-09 17:07:10

可以在PDO连接上设置属性:

代码语言:javascript
复制
$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);

然后运行这个需要取消缓冲的特定查询,

代码语言:javascript
复制
$uresult = $pdo->query("SELECT Name FROM City");
while ($row = $uresult->fetch(PDO::FETCH_ASSOC)) {
    echo $row['Name'] . PHP_EOL;
}

,然后将属性设置回

代码语言:javascript
复制
$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
票数 4
EN

Stack Overflow用户

发布于 2014-01-10 20:18:53

再次,这不起作用,我在使用您的方法时获得了一个错误:

SQLSTATEIM001:驱动程序不支持此功能:此驱动程序不支持设置属性

怎么了?

编辑:我在php.net文档上找到了解决方案。

如果你用这个:

代码语言:javascript
复制
$sth->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);

它不起作用。

但是,如果将其设置在prepare()中的数组中,则可以正常工作。

代码语言:javascript
复制
$sth = $pdo->prepare('SELECT * FROM my_table',
array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => false));

我希望这能帮助那些还没有找到解决这个问题的方法的人。

票数 11
EN

Stack Overflow用户

发布于 2020-06-01 20:01:19

MySQL不实现语句级属性设置。

资料来源:

以下是您的错误消息:

  • stmt.c#L1630 pdo_raise_impl_error(stmt->dbh,stmt,"IM001",“此驱动程序不支持设置属性”);

上面的条件在上面的stmt->methods->set_attribute上被检查。

上面定义了stmt->methods,类型声明在以下位置:

set_attribute参数是第10个struct条目。

下面是MySQL的PDO实现。在这里定义了语句方法:

这表明MySQL PDO模块确实实现了该特性。

讨论:

我已经审查了其他的扩展。而且只有Firebird PDO数据库模块支持该特性。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21024197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档