PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ]; $conn = new PDO($dsn, strtoupper($user), $password, $options); } elseif ($driver_chosen === 'IBM_DB2') { // Dynamic function check prevents compilation crashes if extension isn't loaded if (!function_exists('db2_connect')) { throw new Exception("The native 'ibm_db2' PHP extension is not enabled in your current environment."); } $i5_naming = defined('DB2_I5_NAMING_OFF') ? constant('DB2_I5_NAMING_OFF') : 0; $case_mode = defined('DB2_CASE_UPPER') ? constant('DB2_CASE_UPPER') : 1; $options = [ 'i5_naming' => $i5_naming, 'DB2_ATTR_CASE' => $case_mode ]; $conn = call_user_func('db2_connect', $database, strtoupper($user), $password, $options); if (!$conn) { $err_func = 'db2_conn_errormsg'; throw new Exception("ibm_db2 Connection Failed: " . $err_func()); } } else { throw new Exception("Unknown driver type requested."); } // 3. Process Inbound Form Actions using Secure Prepared Statements if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action'])) { $action = $_POST['action']; $id = isset($_POST['id']) ? trim($_POST['id']) : ''; $addr = isset($_POST['addr']) ? trim($_POST['addr']) : ''; $sql = ""; $params = []; if ($action === 'create' && !empty($id) && !empty($addr)) { $sql = "INSERT INTO MYLIB.CUST (ID, ADDR) VALUES (?, ?)"; $params = [$id, $addr]; $message = "Record ID $id added successfully using $driver_type!"; } elseif ($action === 'update' && !empty($id) && !empty($addr)) { $sql = "UPDATE MYLIB.CUST SET ADDR = ? WHERE ID = ?"; $params = [$addr, $id]; $message = "Record ID $id updated successfully using $driver_type!"; } elseif ($action === 'delete' && !empty($id)) { $sql = "DELETE FROM MYLIB.CUST WHERE ID = ?"; $params = [$id]; $message = "Record ID $id dropped successfully using $driver_type!"; } if (!empty($sql)) { if ($driver_chosen === 'PDO_ODBC') { $stmt = $conn->prepare($sql); $stmt->execute($params); } else { $stmt = call_user_func('db2_prepare', $conn, $sql); if (!$stmt) { $err = 'db2_stmt_errormsg'; throw new Exception($err()); } $res = call_user_func('db2_execute', $stmt, $params); if (!$res) { $err = 'db2_stmt_errormsg'; throw new Exception($err()); } } } } // 4. Unified Record Dataset Fetching $select_sql = "SELECT ID, ADDR FROM MYLIB.CUST ORDER BY ID ASC"; if ($driver_chosen === 'PDO_ODBC') { $stmt = $conn->query($select_sql); $records = $stmt->fetchAll(); } else { $stmt = call_user_func('db2_prepare', $conn, $select_sql); call_user_func('db2_execute', $stmt); while ($row = call_user_func('db2_fetch_assoc', $stmt)) { // Normalizes array casing variations between extensions $records[] = array_change_key_case($row, CASE_UPPER); } } } catch (Exception $e) { $message = "Driver Layer Alert: " . $e->getMessage(); $message_type = "error"; } ?>
| ID | ADDRESS | ACTIONS |
|---|---|---|