gpt4 book ai didi

php - 什么影响 MySQL 中的 max_connections_per_hour 值?

转载 作者:行者123 更新时间:2023-11-29 12:37:25 24 4
gpt4 key购买 nike

我一直在为我的网站编写一个 CMS,并将其托管在 Awardspace 上,该空间的 max_connections_per_hour 限制为 1500。

因此,我很自然地认为这是您与数据库建立的连接数量。我在 PHP 文件的开头创建了一个新的 PDO 对象,并在最后将其关闭。所以我每页只建立 1 个连接。但是,我仍然不断超过 max_connections_per_hour 值。这让我很困惑,因为我不可能在一小时内加载超过 1500 个页面。

但是,我确实每页进行 22 次查询。那么也许这就是影响 max_connections_per_hour 值的原因?即使如此,我仍然觉得自己超过 1500 很奇怪。

我可以执行任何 MySQL 命令来显示我这一小时已经建立的连接数量吗?我已经了解SHOW GLOBAL STATUS,但限制是基于每个用户的,因此如果我使用SHOW GLOBAL STATUS,它会向我显示所有用户已建立的连接。

有人能解释一下为什么会发生这种情况吗?

提前致谢!

编辑:我的数据库类:

require_once(__DIR__ . '/configuration.php');

class Database {

private $dbh;
public $queryCount = 0;

function __construct() {
try {
$this->dbh = new PDO('mysql:host=' . DATABASE_HOST . ';dbname=' . DATABASE_NAME, DATABASE_USERNAME, DATABASE_PASSWORD);
} catch(PDOException $e) {
die($e->getMessage());
}
}

function executeQuery($query, $parameters = array()) {
try {
$statement = $this->dbh->prepare($query);
$statement->execute($parameters);
$statement->setFetchMode(PDO::FETCH_ASSOC);
$result = $statement->fetchAll();
$this->queryCount += 1;
return $result;
} catch(Exception $e) {
die($e->getMessage());
}
}

function close() {
$this->dbh = NULL;
}
}

我使用:

$database = new Database();

在页面顶部,并且

$database->close();

在底部。

为了执行查询,我在两者之间使用适当的函数。

最佳答案

打开连接是一项昂贵的操作,因为您强制关闭连接,所以您要在每个页面上打开一个连接。

在创建新连接之前,您应该先检查连接是否为空。

而且您也不应该手动关闭它。

创建连接时尝试单例方法:

Conn.php

<?php
require_once(__DIR__ . '/configuration.php');

class Conn{
protected static $db;

private function __construct() {
try {
self::$db = new PDO(
'mysql:host=' . DATABASE_HOST . ';dbname=' . DATABASE_NAME,
DATABASE_USERNAME,
DATABASE_PASSWORD,
array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION)
);

self::$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
}
catch (PDOException $e) {
die($e->getMessage());
}
}

public static function getConnection() {
if (!self::$db) {
new Conn();
}
return self::$db;
}

}
?>

数据库.php

<?php
require_once('Conn.php');

class Database{

static $dbh;
static $queryCount = 0;

public function __construct() {
self::$dbh = Conn::getConnection();
var_dump(self::$dbh);
}

public static function executeQuery($query, $parameters = array()) {
try {
$statement = self::$dbh->prepare($query);
$statement->execute($parameters);
$statement->setFetchMode(PDO::FETCH_ASSOC);
$result = $statement->fetchAll();
self::$queryCount += 1;
return $result;
} catch(Exception $e) {
die($e->getMessage());
}
}
}

用法:

include 'Database.php';
$db = new Database();
$data = $db->executeQuery('SELECT * FROM example ');
var_dump($data);

关于php - 什么影响 MySQL 中的 max_connections_per_hour 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26561685/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com