【发布时间】:2018-06-17 21:40:04
【问题描述】:
我有一个网站,它使用 MySql 数据库来存储用于登录的用户信息以及我的数据。该站点托管在共享托管服务器上。我遇到的问题是我偶尔会收到 SQL 连接太多错误。我的最大连接数设置为默认 151。
我的所有服务器端脚本都使用 php,并使用 mysqli pdo 连接。
这里是一些示例代码,展示了我如何处理来自我的 php 脚本的 sql 连接。我删除了与问题无关的所有内容,例如输入过滤和字符转义。
<?php
require("common.php");
//get POST data
//My database query
$query = "
SELECT
id,
username,
password,
salt,
email
FROM users
WHERE
username = :username
";
//set params for prepared statements
$query_params = array(
':username' => $_POST['username']
);
try {
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex) {
$miscErr = "Something failed, please try again.";
}
$row = $stmt->fetch();
//do my password hashing, and checking, and sign in user using data in $row
}
?>
这是我的 common.php 引发错误的地方。我不确定处理它的正确方法是什么,因为我希望代码在失败之前尝试几次。
<?php
$username = "username";
$password = "**************";
$host = "localhost";
$dbname = "mydbname";
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
$miscErr = "";
try {
$db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options);
}
catch(PDOException $ex) {
$miscErr = "Something failed, please try again";
}
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
【问题讨论】:
-
您在共享主机上吗?
-
是的,我是。我应该提到这一点。
-
然后忽略这些数字,它们是针对服务器的,而不是专门针对您的,除非您的代码出现任何错误,否则您可以罚款。
标签: php mysql pdo database-connection