我目前正在重新考虑我的PHP框架的数据库包装器类以使用PDO。
我在数据库包装类中必须完成的主要任务很少:
不幸的是我遇到了#34; ERR_CONNECTION_RESET"每次我在对MySQL数据库执行查询时都使用以下两个PDO属性ATTR_EMULATE_PREPARES => FALSE
和ATTR_PERSISTENT => TRUE
的组合。
以下是示例代码(不是实际的包装类,但它重复了相同的错误):
$connection = new PDO(
'mysql:host=localhost;dbname=test'
,'root'
,''
,array(
PDO::ATTR_AUTOCOMMIT => FALSE
,PDO::ATTR_CASE => PDO::CASE_LOWER
,PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
,PDO::ATTR_EMULATE_PREPARES => FALSE
,PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
,PDO::ATTR_PERSISTENT => TRUE
,PDO::ATTR_ORACLE_NULLS => PDO::NULL_EMPTY_STRING
)
);
if (!$connection->inTransaction()) $connection->beginTransaction();
$statement = $connection->prepare('INSERT INTO dms_devices (model_id, serial_no, name, status) VALUES (:model_id, :serial_no, :name, :status)');
foreach (array('model_id' => 1, 'serial_no' => 12219321, 'name' => 'Demo', 'status' => 'DSS_MANUFACTURED') as $name => $value) {
$statement->bindValue(':'.$name, $value);
}
$statement->execute();
$connection->commit();
一旦我注释掉任何属性ATTR_EMULATE_PREPARES
或ATTR_PERSISTENT
,它就能正常运行。
我在我的开发机器上使用WampServer 2.4 64位(Apache 2.4.4,PHP 5.4.12,MySQL 5.6.12)。
任何建议什么是最好的解决方案(牢记我必须达到的目标)?