我使用此函數在需要時連接到我的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)
你同意這種做法?你認爲它可以優化嗎?感謝您的意見。
如果您需要關閉該連接,該怎麼辦?你想如何確定它是否處於活動狀態(未關閉)? – BlitZ
你希望它有多優化?根據真正的小優化,你應該將它存儲在一個臨時變量中,它將是一個'MOVE'組件,而不是'CALL'和'BRANCH',但是,嘿,就像一個μs。 = D – Jerska
@CORRUPT通常,PHP會在腳本結束時關閉連接。在這種情況下,我使用持久性連接(第6行),這意味着連接在腳本結束時不會關閉,但在另一個腳本使用相同憑據請求連接時會被緩存和重新使用。不過,我想如果添加一個參數,如果爲true,則將$ pdo設置爲null即可。 – andufo