遇到了一个非常变态的mysql错误,可能和他遇到的一样变态,点击查看。
无论怎么优化都一直出现这样的mysql错误:MySQL server has gone away
我程序中出现的错误原因可能是,mysql连接超时被关闭了,这可以通过修改my.ini,修改wait_timeout的值,来延长等待时间。(此方法未尝试)
我在程序中加入了如下判断,程序可以执行了。
下载: connect.php
- <?php
- if (!$link){
- mysql_close($link);//这里最好先再关闭一次,否则可能会出错
- $link = content();
- }elseif(!mysql_ping($link)){
- mysql_close($link);
- $link = content();
- }
- ?>
- <?php
- function content(){
- return mysql_pconnect('localhost', 'root', 'password');mysql_select_db('d5s');
- }
- set_time_limit(0); //避免apache执行脚本超时
- $link = content();
- $num = 10; //每次查出XX条
- $sum = 1000; //多少条记录
- for ($i=0; $i<=$sum; $i=$i+$num){
- $sql = "SELECT * FROM `tables` WHERE is_get=0 LIMIT ".$num;
- $result = mysql_query($sql);
- $arr_row = array();
- while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
- $arr_row[] = $row;
- }
- mysql_free_result($result);
- foreach ($arr_row as $row){
- //超耗时代码开始
- /*
- ……
- */
- //超耗时代码结束
- if (!$link){
- mysql_close($link);
- $link = content();
- }elseif(!mysql_ping($link)){
- mysql_close($link);
- $link = content();
- }
- mysql_query("UPDATE `tables` SET is_get = 1 WHERE id = ".$row["id"]);
- }
- }
- mysql_close($link);
- ?>