PDO如何返回已执行查询的总数

时间:2010-12-14 17:50:40

标签: php mysql pdo

使用mysql包装器

function query($msql)
{
    $this->last_connection =& $this->connection;
    $this->msql =& $msql;
    $queryult = mysql_query($msql, $this->connection);
    if ($queryult) {
        $this->queries_count++;
        return $queryult;
    } else {
        $this->display_errors();
        return false;
    }
}

function num_queries()
{
    return @$this->queries_count;
}

使用PDO如何获取已执行查询的总数。

2 个答案:

答案 0 :(得分:1)

PDO不计算查询。你必须自己实现它,例如使用PDO类的自定义扩展。

答案 1 :(得分:0)

如果您在单个进程/请求中计算查询并且需要知道在执行单个任务的过程中执行了多少次,那么您可以使用_construct和_destruct魔术函数将此功能直接构建到数据库对象中在PHP 5.3上。由于现有的查询对象功能会增加此计数,因此可以保存它。

编写一个_destruct函数,该函数将保存查询函数迭代到系统上的日志文件或数据库中预定位置的次数。这会将queries_count属性的值保存到您可以使用它的位置。

function _destruct(){
//write a log file with the value or a serialized version of the database object itself
//set the mode to w+ so it truncates every request
$fh = fopen('/path/to/a/new/log' 'w+');
fwrite($fh, $this->queries_count);
fclose($fh);
}

每次数据库对象都是GC时都会运行。然后,您可以编写静态方法来打开文件并读取值。

public static function getLastQueriesCount(){
  $fh = fopen('/path/to/a/new/log' 'r+');
  $count = fgets($fh);
  fclose($fh);
  return $count;
}

您当然需要为此文件/目录正确设置写权限。您可以替换函数体来存储您喜欢的计数 - 无论是平面文件格式还是数据库。