- 如何出现 MySQL server has gone away
用第3中的方法
- 代码中如何使用长连接和短连接
PDO::ATTR_PERSISTENT:当前对Mysql服务器的连接是否是长连接
什么情况下使用长连接?
不同的脚本的执行间距非常短,同时每个脚本都要操作数据库(Mysql:mysql_pconnect())
虽然PHP是解析的,也没有像容器之类的东西,但这个长连接是由扩展库维护的,也相当于有一个数据库连接线程池,页面的数据库请求需要的时候就从池里获取。
- 会话过期
如果mysql的配置中这样设置
wait_timeout=10//貌似SHOW VARIABLES LIKE '%timeout%';不会改变。SHOW GLOBAL VARIABLES LIKE '%timeout%';就是改变的了
interactive_timeout=10,//这个修改的会变
那么下面sleep(2)毫无问题,会一直打印数据库内容,如果sleep(11),那就只打印一次,然后就MySQL server has gone away
<?php
$dbh = new PDO('mysql:host=localhost;dbname=jack', 'root', '');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
while(1){
$sql = "select * from users";
$stmt = $dbh->prepare($sql);
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
echo $row['name'].' - '.date("Y-m-d H:i:s")."\n";
}
sleep(2);
}
网友评论