Kotchasan Framework Documentation

Kotchasan Framework Documentation

MSSQLDriver Class

TH 05 Feb 2026 06:23

MSSQLDriver Class

ภาพรวม

คลาส Kotchasan\Connection\MSSQLDriver เป็นไดรเวอร์เฉพาะสำหรับฐานข้อมูล Microsoft SQL Server รองรับฟีเจอร์ของ SQL Server เช่น การเข้ารหัส การจัดการ indexes และ SQL functions เฉพาะ

การติดตั้งและความต้องการ

ความต้องการ

  • PHP 7.4 หรือสูงกว่า
  • PDO SQL Server extension (pdo_sqlsrv)
  • Microsoft SQL Server 2012+

การตั้งค่าการเชื่อมต่อ

การตั้งค่าพื้นฐาน

use Kotchasan\Connection\MSSQLDriver;

$config = [
    'host' => 'localhost',
    'port' => 1433,
    'database' => 'myapp',
    'username' => 'sa',
    'password' => 'password',
    'charset' => 'utf8'
];

$driver = new MSSQLDriver();
$connected = $driver->connect($config);

การตั้งค่าขั้นสูง

$config = [
    'host' => 'sqlserver.example.com',
    'port' => 1433,
    'database' => 'production_db',
    'username' => 'app_user',
    'password' => 'secure_pass',
    'appname' => 'MyKotchasanApp',
    'timeout' => 30,
    'encrypt' => true,
    'trust_server_certificate' => true,
    'pooling' => true
];

ฟีเจอร์เฉพาะ SQL Server

การเพิ่มประสิทธิภาพตาราง

// SQL Server ใช้ ALTER INDEX REBUILD
$success = $driver->optimizeTable('users');
// ทำงานเป็น: ALTER INDEX ALL ON [users] REBUILD;

SQL Functions สำหรับ SQL Server

// ฟังก์ชันวันที่
$hourFunc = $driver->formatSqlFunction('HOUR', ['column' => 'created_at'], 'hour_created');
// ผลลัพธ์: DATEPART(HOUR, [created_at]) AS [hour_created]

// รวมข้อความ
$concatFunc = $driver->formatSqlFunction('CONCAT', [
    'fields' => ['first_name', 'last_name'],
    'separator' => ' '
], 'full_name');
// ผลลัพธ์: ([first_name] + ' ' + [last_name]) AS [full_name]

// รวมข้อความแบบกลุ่ม
$groupConcatFunc = $driver->formatSqlFunction('GROUP_CONCAT', [
    'column' => 'tag_name',
    'separator' => ', ',
    'order' => ['tag_name']
], 'tags');
// ผลลัพธ์: STRING_AGG([tag_name], ', ') WITHIN GROUP (ORDER BY [tag_name]) AS [tags]

// สุ่ม
$randFunc = $driver->formatSqlFunction('RAND', [], 'random_value');
// ผลลัพธ์: NEWID() AS [random_value]

// จัดการค่า NULL
$ifnullFunc = $driver->formatSqlFunction('IFNULL', [
    'column1' => 'nickname',
    'column2' => 'first_name'
], 'display_name');
// ผลลัพธ์: ISNULL([nickname], [first_name]) AS [display_name]

ตัวอย่างการใช้งาน

การทำงานกับ Identity Columns

// INSERT และดึง Identity value
$stmt = $driver->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->execute(['John Doe', 'john@example.com']);
$newId = $driver->lastInsertId(); // ไม่ต้องระบุ sequence name;

การจัดการ Transaction ขั้นสูง

try {
    $driver->beginTransaction();

    // ใช้ savepoint
    $driver->prepare("SAVE TRANSACTION sp1")->execute();

    // ทำงานต่างๆ
    $stmt1 = $driver->prepare("INSERT INTO orders (user_id, total) VALUES (?, ?)");
    $stmt1->execute([1, 100.00]);

    // หากมีปัญหา rollback ไป savepoint
    // $driver->prepare("ROLLBACK TRANSACTION sp1")->execute();

    $driver->commit();

} catch (\Exception $e) {
    $driver->rollback();
    throw $e;
}

การจัดการข้อผิดพลาด

try {
    $driver->connect($config);
} catch (\PDOException $e) {
    $message = $e->getMessage();

    if (strpos($message, 'Login failed') !== false) {
        echo "การเข้าสู่ระบบล้มเหลว";
    } elseif (strpos($message, 'Cannot open database') !== false) {
        echo "ไม่สามารถเปิดฐานข้อมูล";
    } else {
        echo "ข้อผิดพลาด SQL Server: " . $message;
    }
}

คำแนะนำ

แนวทางปฏิบัติที่ดี

  1. ใช้ Encryption: เปิดใช้งาน encryption สำหรับความปลอดภัย
  2. จัดการ Connection Pooling: ใช้ connection pooling
  3. ใช้ Indexes: สร้าง indexes ที่เหมาะสม
  4. ตั้งค่า Timeout: กำหนด timeout ที่เหมาะสม

ข้อควรระวัง

  1. Identifier Quoting: ใช้ square brackets [table_name]
  2. Data Types: ระวังความแตกต่างของ data types ระหว่าง SQL Server และ Database อื่น
  3. Case Sensitivity: ขึ้นอยู่กับ collation settings
  4. SQL Injection: ห้ามนำ input ของผู้ใช้มาต่อ string SQL โดยตรง ให้ใช้ parameter binding เสมอ

คลาสที่เกี่ยวข้อง

  • Connection - คลาสการเชื่อมต่อพื้นฐาน
  • DriverInterface - อินเทอร์เฟซไดรเวอร์
  • MySQLDriver - ไดรเวอร์ MySQL