我正在使用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',
);