php – 重用数据库连接对象
发布时间:2020-12-13 16:51:03 所属栏目:PHP教程 来源:网络整理
导读:我正在使用此函数在需要时连接到我的 MySQL数据库,并且还可以在同一个php脚本中重新使用相同的连接对象进行我可能需要的任何进一步查询. function cnn() { static $pdo; if(!isset($pdo)) { try { $pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME,
我正在使用此函数在需要时连接到我的
MySQL数据库,并且还可以在同一个php脚本中重新使用相同的连接对象进行我可能需要的任何进一步查询.
function cnn() { static $pdo; if(!isset($pdo)) { try { $pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME,DB_USER,DB_PASS); $pdo->setAttribute(PDO::ATTR_TIMEOUT,30); $pdo->setAttribute(PDO::ATTR_PERSISTENT,true); $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_OBJ); return $pdo; } catch(PDOException $e) { http_response_code(503); echo $e->getCode.': '.$e->getMessage(); die(); //or whatever error handler you use } } else { return $pdo; } } 第一个查询(创建对象) echo cnn()->query('SELECT firstname FROM user WHERE id=4;')->fetch(PDO::FETCH_COLUMN) 第二个查询(对象被重用) echo cnn()->query('SELECT title FROM news WHERE id=516;')->fetch(PDO::FETCH_COLUMN) 你同意这种方法吗?你认为它可以优化吗?谢谢你的意见. 解决方法
我同意这种方法,虽然很多人会告诉你这种“单身”方法是坏的,坏的.
但是,我不同意您的实施.它应该是: function cnn() { static $pdo; if(!$pdo) { $conf = array(PDO::ATTR_TIMEOUT => 30,PDO::ATTR_PERSISTENT => true,PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,); $dsn = 'mysql:host='.DB_HOST.';dbname='.DB_NAME; $pdo = new PDO($dsn,DB_PASS,$conf); } return $pdo; } 此外,将处理程序代码移动到处理程序中是很明智的(当然,无需无条件地回应错误!) function my_exceptionHandler($exception) { http_response_code(503); if (ini_get('display_errors')) { echo $e->getMessage().$e->getTrace(); } else { log_error($e->getMessage().$e->getTrace()); } die(); //or whatever error handler you use } set_exception_handler("my_exceptionHandler"); 此外,我将它扩展为接受一个参数,以使多个连接成为可能. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |