Я использую эту функцию для подключения к моему MySQL db, когда это необходимо, а также для повторного использования одного и того же объекта соединения для любого последующего запроса, который может понадобиться в том же скрипте 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)
Согласны ли вы на такой подход? Как вы думаете, его можно оптимизировать? Спасибо за ваше мнение.
Что делать, если вам нужно закрыть это соединение? Как вы хотите определить, активна ли она (не закрыта)? – BlitZ
Как далеко вы хотите, чтобы он был оптимизирован? С точки зрения ДЕЙСТВИТЕЛЬНО ДЕЙСТВИТЕЛЬНО мало оптимизации, вы должны сохранить его во временной переменной, это будет одна сборка 'MOVE', а не' CALL' и 'BRANCH', но эй, это как один мкс. = D – Jerska
@CORRUPT Обычно PHP закрывает соединение, когда скрипт заканчивается. В этом случае я использую постоянные соединения (строка 6), что означает, что соединения не закрыты в конце скрипта, но кэшируются и повторно используются, когда другой скрипт запрашивает соединение с использованием тех же учетных данных. Тем не менее, я думаю, не помешает добавить параметр, который, если true, устанавливает $ pdo в null. – andufo