mysql_select_db报错求助:INIT_DB OK包读取错误及连接中断问题
mysql_select_db() 报错问题 首先,你遇到的这两个错误——Error while reading INIT_DB's OK packet 和 MySQL server has gone away——本质上都是数据库连接失效导致的,而且间歇性出现说明是连接的生命周期或者超时配置出了问题,咱们一步步来排查:
1. 先检查连接有效性,失效时重新连接
你的代码第4行是mysql_*相关操作,大概率是脚本一开始建立了连接,但中间有长时间操作(比如文件上传、大文件处理),导致连接被MySQL服务器主动断开了。这时候再执行mysql_select_db自然会报错。
你可以在执行数据库操作前先检查连接是否存活,失效就重新建立:
// 假设$conn是你的数据库连接资源 if (!mysql_ping($conn)) { // 连接失效,重新初始化连接 $conn = mysql_connect('localhost', '你的用户名', '你的密码'); mysql_select_db('目标数据库名', $conn); }
2. 调整MySQL的超时配置
MySQL默认的wait_timeout和interactive_timeout是8小时,但如果你的脚本经常有长时间闲置的连接(比如上传文件后很久才操作数据库),服务器会主动断开这些闲置连接。
打开WAMP里的MySQL配置文件(my.ini,在WAMP的MySQL菜单里能找到编辑入口),修改这两个参数:
wait_timeout = 3600 interactive_timeout = 3600
改成1小时(3600秒)或者更长,然后重启MySQL服务试试。
3. 优化文件上传后的逻辑
你提到上传含错误的文件后网页正常,但程序有时报错。很大可能是上传大文件时,脚本执行时间过长,导致之前建立的数据库连接超时失效了。建议在文件上传完成后,重新初始化数据库连接,再执行后续的数据库操作,不要复用之前的旧连接。
4. 尽快替换废弃的mysql_*函数
划重点:mysql_*系列函数在PHP 5.5就被废弃了,PHP 7直接移除了这些函数,兼容性和稳定性都很差,这也可能是间歇性报错的潜在原因。建议换成mysqli_*或者PDO,比如用mysqli的示例:
// mysqli连接示例 $conn = mysqli_connect('localhost', '你的用户名', '你的密码', '目标数据库名'); if (mysqli_connect_errno()) { die('连接失败: ' . mysqli_connect_error()); }
PDO会更灵活,支持多种数据库,错误处理也更完善。
如果试过这些方法还是有问题,可以再检查一下MySQL的错误日志(WAMP里MySQL菜单能找到日志路径),看看有没有更详细的服务器端错误信息,能帮你定位具体原因。
内容的提问来源于stack exchange,提问作者ve_1992

