สอบถามการเขียนแบบนี้มีผลเสียอะไรไหมครับ(connect/close database in class)
Code (PHP)
class test {
private $sqlsrv = null;
private $db_host;
private $db_user;
private $db_pass;
function __construct() {
$_conf = include('config.php');
$this->db_host = $_conf['db']['host'];
$this->db_user = $_conf['db']['user'];
$this->db_pass = $_conf['db']['pass'];
}
private function connect_sql($database)
{
$conInfo = [
'Database' => 'database',
'UID' => $this->db_user,
'PWD' => $this->db_pass,
"CharacterSet" => 'UTF-8',
'MultipleActiveResultSets'=>true
];
$this->sqlsrv = sqlsrv_connect($this->db_host,$conInfo)or die(print_r( sqlsrv_errors(), true));
}
private function db_close() {
sqlsrv_close($this->sqlsrv);
}
public function get_info($account)
{
$this->connect_sql();
$result = 0;
$sql = "EXEC select_info ?,?";
$params = [
[&$account,SQLSRV_PARAM_IN],
[&$result,SQLSRV_PARAM_OUT]
];
$stmt = sqlsrv_query($this->sqlsrv,$sql,$params);
if( $stmt === false )die(print_r( sqlsrv_errors(), true));
sqlsrv_free_stmt($stmt);
$this->db_close();
return $result;
}
public function get_info2($account)
{
$this->connect_sql();
$result = 0;
$sql = "EXEC select_info2 ?,?";
$params = [
[&$account,SQLSRV_PARAM_IN],
[&$result,SQLSRV_PARAM_OUT]
];
$stmt = sqlsrv_query($this->sqlsrv,$sql,$params);
if( $stmt === false )die(print_r( sqlsrv_errors(), true));
sqlsrv_free_stmt($stmt);
$this->db_close();
return $result;
}
public function get_info3($account)
{
$this->connect_sql();
$result = 0;
$sql = "EXEC select_info3 ?,?";
$params = [
[&$account,SQLSRV_PARAM_IN],
[&$result,SQLSRV_PARAM_OUT]
];
$stmt = sqlsrv_query($this->sqlsrv,$sql,$params);
if( $stmt === false )die(print_r( sqlsrv_errors(), true));
sqlsrv_free_stmt($stmt);
$this->db_close();
return $result;
}
}
อยากทราบว่าหากมีการ connect และ close database แบบนี้ในคราสแบบนี้(หลายฟังชั่น) จะมีผลเสียอะไรไหมครับ ปกติเขาเขียนกันแบบนี้รึป่าวครับ ขอบคุณครับTag : PHP, Ms SQL Server 2008
Date :
2019-02-02 15:02:06
By :
armaz01
View :
827
Reply :
5
ไม่เคยใช้ sqlsrv_xxx() เลยไม่แน่ใจจะหลักการเดียวกันไหม
แต่ว่า ปกติการออกแบบการทำงานใน 1 หน้าหรือ 1 process การเปิดการเชื่อมต่อกับฐานข้อมูลควรทำอันดับแรกๆ แล้วระหว่างกลางก็จะทำอะไร query อะไรก็ทำไป ตอนจบ process ไม่ว่าจบปกติหรือจบแบบ throw error ก็ควรปิดการเชื่อมต่อฐานข้อมูล.
ที่ควรเป็นแบบนี้เพื่อไม่ให้มีการเชื่อมต่อ เปิดๆปิดๆ ถี่ๆมากเกินไป.
Date :
2019-02-02 22:49:04
By :
mr.v
ขอบคุณมากครับสงสัยต้องเปลี่ยนวิธีการเขียน
Date :
2019-02-03 07:24:52
By :
armaz01
PHP เมื่อทำงานมาถีงบรรทัดสุดท้าย ไม่มี process หรือ loop ค้างอยู่ในโปรแกรม
ก็จะปิด connection เองโดยอัตตโนมัติ ปิดมันทุกอย่างที่โปรแกรมเปิดไว้
คุณไม่จำเป็นต้อง ปิดอะไรเลย มันปิดให้เอง
แต่ที่เขามี คำสั่งสำหรับ ปิดอะไรต่างๆ นั้น เขามีไว้ในกรณี่ที่ คุณมีความชำนาญมากชึ้น เขียนโปรแกรม หลายมิติ
มีการทำงาน หลาย process ในเวลาเดียวกัน ซึ่งจำเป็นต้องใช้ หน่วยความจำจำนวนมาก และ port หลายๆ port เพื่อใช้เชื่อมต่อกับภายนอก
ถ้าไม่ใช้ ก็ควรจะปิดเพื่อคืน หน่วยความจำ และ port ที่ใช้ในการเชื่อมต่อ ให้กับเครื่อง server จะได้เปิดให้ เครื่องอื่นติดต่อเข้ามาทำงานได้
Date :
2019-02-03 23:59:10
By :
Chaidhanan
Load balance : Server 04