【问题标题】:unbuffered query with MySQLi?使用 MySQLi 进行无缓冲查询?
【发布时间】:2009-12-30 19:38:07
【问题描述】:

MySQLi 查询是否无缓冲?如果没有,有没有办法进行无缓冲查询,如非 MySQLi mysql_unbuffered_query()

【问题讨论】:

  • 你的意思是查询没有缓冲,还是响应集没有缓冲? 为什么无缓冲会有优势?
  • 响应集。根据mysql_unbuffered_query 的文档:“这为生成大型结果集的 SQL 查询节省了大量内存,并且您可以在检索到第一行后立即开始处理结果集,因为您不必等待直到执行完完整的 SQL 查询。”
  • 啊!很好。我想我从来没有遇到过通过 MYSQL 连接移动大量数据的情况。

标签: php mysql mysqli unbuffered-queries


【解决方案1】:

MindStalker 是对的,但也许最简单的方法是 PHP 手册中显示的方法
http://php.net/manual/en/mysqlinfo.concepts.buffering.php

将 MYSQLI_USE_RESULT 常量作为 resultmode 参数传递,您可以将 mysqli_query 设置为 mysql_unbuffered_query

<?php
$mysqli  = new mysqli("localhost", "my_user", "my_password", "world");
$uresult = $mysqli->query("SELECT Name FROM City", MYSQLI_USE_RESULT);

if ($uresult) {
   while ($row = $uresult->fetch_assoc()) {
       echo $row['Name'] . PHP_EOL;
   }
}
$uresult->close();
?>

【讨论】:

    【解决方案2】:

    mysqli_real_query() 后跟 mysqli_use_result()

    【讨论】:

    • mysqli_use_result 似乎正是我想要的。谢谢!
    【解决方案3】:

    对我有用

    $uresult = $mysqli_new->query("INSERT INTO world (username, userid, points, price, br, admin) 
    VALUES ('$word[username]',$word[userid], $points, 0, 0, '$word[adminname]')", MYSQLI_USE_RESULT);
    $uresult = $mysqli_new->query("SELECT username FROM world WHERE userid='$word[userid]'", MYSQLI_USE_RESULT);
    if ($uresult) 
    {
        while ($row = $uresult->fetch_assoc()) 
        {
           echo "uresult: ".$row['username'] . PHP_EOL;
        }
    }
    $uresult->close();
    

    【讨论】:

      猜你喜欢
      • 2013-08-09
      • 2016-12-23
      • 2010-10-24
      • 1970-01-01
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      • 2012-04-28
      • 2019-04-04
      相关资源
      最近更新 更多