当我尝试连接到我的数据库时出现以下错误。
警告:mysqli :: mysqli()[mysqli.mysqli] :( HY000 / 2002):无法连接 通过socket'/var/run/mysqld/mysqld.sock'到本地MySQL服务器(2) 在/homez.640/connelho/www/uea/includes/database.php第8行失败 连接到MySQL:(2002)无法连接到本地MySQL服务器 通过套接字'/var/run/mysqld/mysqld.sock'(2)
在执行任何SQl查询之前,我总是运行以下连接方法:
public static function connect() {
require_once("constants.php");
$mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME);
if ($mysqli->connect_errno) {
die("Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error);
}
return $mysqli;
}
在任何SQl查询之后,我总是运行以下disconnect方法:
public static function disconnect($mysqli = NULL, $stmt = NULL) {
if (isset($mysqli)) {
$mysqli->close();
}
if (isset($stmt)) {
$stmt->close();
}
}
我查看了https://stackoverflow.com/a/2499660并通过电子邮件发送了我的托管服务提供商,他们告诉我检查我的脚本“我们有30个MySQL连接作为限制 - 我们无法调整这个并且没有理由为什么它应该发生如果你的脚本运行正常“。它工作正常几周然后突然停止连接。我是该网站的唯一访问者。
关于我的数据库类如何连接和断开连接的示例:
public static function county_select() {
//connect to database
$mysqli = Database::connect();
//write sql statement
$sql = "SELECT id, county FROM Counties ORDER BY country, county ASC";
//prepared statement, stage 1: prepare
if (!($stmt = $mysqli->prepare($sql))) {
die("Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error);
}
//prepared statement, stage 2: execute
if (!$stmt->execute()) {
die("Execute failed: (" . $stmt->errno . ") " . $stmt->error);
}
//prepared statement, stage 3: bind result
if (!$stmt->bind_result($id, $county)) {
die("Binding result failed: (" . $stmt->errno . ") " . $stmt->error);
}
$counties = array();
//prepared statement, stage 5: fetch
while ($stmt->fetch()) {
$counties[] = array("id" => $id, "county" => $county);
}
//disconnect from database
Database::disconnect($mysqli, $stmt);
return $counties;
}
我现在无法连接到我的网站一天。连接到期需要多长时间?如何手动断开它们?我以为PHP会在请求结束时自动关闭数据库连接吗?
答案 0 :(得分:2)
查询后请勿断开连接!仅在第一次查询发生时连接到数据库一次。否则你会尝试连接不必要的东西,这不止一次。
在寻找性能时,始终连接和断开连接并不是一个好主意。它会禁用某些功能:基本上,您将丢失与现有连接相关的任何内容,例如重新使用预准备语句或在后续查询中访问LAST_INSERT_ID()。保持连接存活对此非常重要。
但是你的问题通常源于滥用持久连接,但我在这里看不到这样的事情。
答案 1 :(得分:1)
好的,我一直都非常愚蠢。我无法在那天晚上连接到服务器,所以我将我在connect方法中使用的常量切换到localhost,然后在第二天忘记了......难怪我无法连接!什么是扳手哈哈。不知道为什么我不能连接另一个晚上,但我现在可以。抱歉浪费人的时间