【发布时间】:2014-01-01 01:57:29
【问题描述】:
我的一个 Android 应用程序在使用基于 PHP/Mysql 的 Web 服务 API 时遇到问题。这是问题描述。
我在错误日志中收到以下错误。
用户 my-db-user 已经有超过 'max_user_connections' 个活动连接
我的代码用完了mysql database connections,我已经达到了我的主机可以提供的最大限制。我不能再增加max_connections 和max_user_connections。
这是我在 PHP 脚本中编写数据库访问的方法。我到处都遵循这种模式,所以在所有数据库访问类及其方法(如获取、插入、更新、删除等)中都是相同的。
DatabaseHelper.php
<?php
class DatabaseHelper {
private $db_host = 'my-host';
private $db_user = 'my-db-user';
private $db_password = 'my-password';
private $db_name = 'my-db-name';
public function getConnection() {
try {
$con = new mysqli($this->db_host, $this->db_user, $this->db_password, $this->db_name);
return $con;
} catch (Exception $ex) {
error_log('DB Error --> ' . $ex);
return null;
}
}
}
?>
这是我在数据库访问类中使用它的方式。
<?php
require_once (dirname(__FILE__) . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . "pathtofile" . DIRECTORY_SEPARATOR . 'DatabaseHelper.php');
class SomeDao {
public function get() {
$result = array();
$database = new DatabaseHelper();
$mysqli = $database->getConnection();
if ($mysqli != null) {
$stmt = $mysqli->stmt_init();
if ($stmt->prepare("SELECT columns FROM some_table")) {
$status = $stmt->execute();
if ($status) {
$stmt->bind_result($columns);
$records = array();
while ($stmt->fetch()) {
// build record array
$record = array();
// add key value pairs to array
$record["columns"] = $columns;
// add $record to $records
array_push($records, $record);
}
$result["statusCode"] = Constants::$OK;
$result["statusMessage"] = "OK";
$result["records"] = $records;
} else {
$result["statusCode"] = Constants::$SYSTEM_ERROR;
$result["statusMessage"] = "System Error." . $mysqli->error;
}
@$stmt->close();
} else {
$result["statusCode"] = Constants::$SYSTEM_ERROR;
$result["statusMessage"] = "System Error." . $mysqli->error;
}
@$mysqli->close();
} else {
$result["statusCode"] = Constants::$SYSTEM_ERROR;
$result["statusMessage"] = "System Error.";
}
return $result;
}
}
?>
我相信会有很多人像我一样面对这个问题并成功解决它。必须有某种方法来优化mysql db connections 的使用,我想知道我该怎么做。我只需要可以用来克服这个问题的最佳方法。
希望我已经清楚地说明了我的问题。请帮忙。
问候
【问题讨论】:
-
嗨@jagmohan,我希望你已经解决了这个问题。我们在一个 Android 应用程序中面临同样的问题,后端团队无法解决这个问题。你能告诉我你是如何解决这个问题的吗?
标签: php mysql mysqli mysqlconnection