ERR_CONNECTION_RESET *仅*当使用ajax - CakePHP异步调用db时


ERR_CONNECTION_RESET *only* when making asynchronous calls to db using ajax - CakePHP

我正在使用CakePHP 2.4.6和PHP 5.4.16开发一个非常简单的实用程序(下面是我的环境的完整分解)。该数据库是托管在AWS上的传统MS SQL数据库。我能够以这样一种方式配置涉及PDO的所有内容,即应用程序成功连接到数据库,并提取和更新记录。

我的主控制器向用户呈现一个视图,其中包含从数据库中提取的相关记录。每条记录都有一个简单的关联表单,该表单带有一个复选框,允许用户更新该记录。当用户勾选复选框时,我使用ajax调用单独的控制器上的方法,该方法更新db中的记录并返回结果。

这是我遇到的问题:如果我快速连续勾选一堆框,一切都很好——所有记录都成功更新了。但是,如果我在复选框之间暂停(10秒左右),那么net::ERR_CONNECTION_RESET更新就会失败。error.log中没有任何记录。勾选一个方框,ajax触发,记录更新;暂停;选中另一个方框,ajax触发,控制器返回错误;暂停;选择另一个方框,ajax触发,记录被更新,等等。

我确认该错误与试图连接到数据库的应用程序有关,因为如果我从控制器方法中删除所有数据库操作,并且只是返回一些任意值给ajax调用,那么一切都可以正常工作。我(没有受过教育)的猜测是,我遇到了与数据库的重复/并行连接的某种问题。因此,每当尝试重复连接时,连接将被重置,这意味着下一次尝试连接时连接将成功,依此类推。我没有发布任何代码,因为我真的不知道从哪里开始尝试解决这个问题。据我所知,一切都在我的代码中工作;我不知道这是否是CakePHP框架本身的问题,或者我的数据库配置,或者PDO的驱动程序设置,或者我缺少的其他东西。让我知道,如果具体的代码将是有帮助的,并提前感谢任何帮助!

我环境:

    Windows 8
  • WampServer 2.4 x86Apache 2.4.4
  • CakePHP 2.4.6
  • PHP 5.4.16
  • Microsoft Visual c++ 2010 Redistributable Package x86
  • Microsoft SQL Server 2008 Native Client
  • Microsoft ODBC Driver 11
  • Microsoft SQLSRV driver 3.0(特别是php_pdo_sqlsrv_54_ts.dll)

我也有同样的问题,但不一定是AJAX调用,只是在加载页面,发送表单等…

    Windows 10
  • XAMPP 5.6.21-0
  • PHP 5.6.21
  • CakePHP 2.8.5
  • SQL Server 2012
  • Microsoft SQL Server Management Studio
  • Microsoft SQLSRV driver 3.2
  • php_pdo_sqlsrv_56_ts.dll
  • Microsoft ODBC Driver 11

编辑:问题解决了!在app/Config/database.php中设置'persistent'为false

public $default = array(
    'datasource' => 'Database/Sqlserver',
    'persistent' => false,
    'database' => 'YOURDB',
);