这个脚本要提取的数据库信息特别大,所以有时候在调试程序的时候,我点了浏览器上的“停止载入当前”按钮(就是红叉子),用navicat查看数据库进程,发现刚才这个脚本打开的数据库连接还在,这是怎么回事?我已经在脚本中加入了:ignore_user_abort(false);谢谢!

解决方案 »

  1.   

    PHP不会主动检测与客户端的连接是否断开。所以即使客户端关闭了脚本也会照常执行完。
    connection_aborted() 函数可以检测连接是否终止,提取数据时不断检测一下。
    还有其它的解决方法 http://www.php.net/manual/zh/function.connection-aborted.php
      

  2.   

    可是ignore_user_abort()函数就是执行“是否在用户断开连接时中止脚本运行”啊?
      

  3.   

    是否在用户断开连接时中止脚本运行 的前提是PHP要知道与客户端连接是否中止
    当脚本echo()或flush()对外输出失败时才会得知客户端已经断开
      

  4.   

    我是这样写的,先在脚本文件最上面写上:ignore_user_aborted(false);
    我操作数据库的代码写成了一个函数,然后是循环执行的,然后我在每次执行的时候都判断一下if(!connection_abort()){...},这样写对吗?
    我测试了一下,还是不行~数据库的进程里还是有。。
      

  5.   

    对的,或许该再加个 else exit(); 就好了吧。
      

  6.   

    那ignore_user_abort()这函数不就失去作用了吗?
      

  7.   

    connection_abort()错了,是 connection_aborted() // 如果已终止连接,则该函返回 1,否则返回 0。
      

  8.   

    不是说PHP脚本执行完了,就断开连接吗不过,还是学习了
      

  9.   

    我用的就是connection_aborted()
    if(!connection_aborted()) {
    $stmt = $pgLink->prepare($sql);
    $stmt->execute();
    $affRow = $stmt->rowCount();
    }
      

  10.   

    在PHP脚本中末尾设置关闭数据库的代码       不是在页面JS中关闭