我的MySQL数据库中有太多主机PDO异常:
exception 'PDOException' with message 'SQLSTATE[HY000] [1129] Host
'[IP ADDRESS]' is blocked because of many connection errors; unblock
with 'mysqladmin flush-hosts'' in /var/www/libs/Database.php:15
我理解这个错误,但真正的问题是在堆栈跟踪中将数据库名称,登录名和密码转储到控制台中:
Stack trace:
#0 /var/www/libs/Database.php(15): PDO->__construct('mysql:host=conf...',
'[db name]', '[db password]...', Array)
由于这是一个AJAX请求,它会转储到控制台浏览器中,这显然是一个问题。
我怎样才能避免这种情况发生?我是否错误地配置了PHP?
答案 0 :(得分:3)
由于这是一个AJAX请求,它会转储到控制台浏览器
当然,PHP(与其他服务器端语言一样)在另一台计算机上执行,无法访问浏览器的控制台。最有可能的是,您的PHP和JavaScript都不是为了优雅地处理错误条件而设计的。一些提示:
始终在生产框中将display_errors
设置为false。确保记录错误消息。
调整服务器端代码,使其即使在数据库关闭时也会生成有效输出。例如,如果脚本应该生成JSON,那么即使出错也应该发送JSON数据。为此:
PDOException
发送JSON数据通知存在错误,例如:
{"status": "error", "info": "Database is down"}
调整客户端代码以处理AJAX响应中的任何类错误,包括状态=错误和缺少适当JSON的正确JSON。