こんにちは!今回は、DB2データベースから取得した結果を配列として扱えるdb2_fetch_array
関数について、分かりやすく解説していきます!
db2_fetch_arrayとは?🤔
この関数は、DB2のクエリ結果から1行ずつデータを配列として取得する関数です。数値インデックスと連想配列の両方の形式でデータを取得できます。
基本的な構文
array db2_fetch_array ( resource $stmt [, int $row_number = -1 ] )
基本的な使用例
例1:シンプルな取得方法
$sql = "SELECT * FROM employees";
$stmt = db2_exec($connection, $sql);
while ($row = db2_fetch_array($stmt)) {
echo "ID: " . $row[0] . "\n";
echo "名前: " . $row[1] . "\n";
echo "部署: " . $row[2] . "\n";
echo "-------------------\n";
}
例2:連想配列として取得
$sql = "SELECT emp_id, name, department FROM employees";
$stmt = db2_exec($connection, $sql);
while ($row = db2_fetch_array($stmt)) {
print_r($row);
/* 出力例:
Array (
[0] => 1001
[1] => 山田太郎
[2] => 営業部
[EMP_ID] => 1001
[NAME] => 山田太郎
[DEPARTMENT] => 営業部
)
*/
}
実践的な使用例
例1:社員リストの表示
function displayEmployeeList($connection) {
$sql = "SELECT emp_id, name, department, salary
FROM employees
ORDER BY department, name";
$stmt = db2_exec($connection, $sql);
if (!$stmt) {
throw new Exception("クエリ実行エラー");
}
echo "<table border='1'>";
echo "<tr><th>ID</th><th>名前</th><th>部署</th><th>給与</th></tr>";
while ($row = db2_fetch_array($stmt)) {
echo "<tr>";
echo "<td>" . htmlspecialchars($row[0]) . "</td>";
echo "<td>" . htmlspecialchars($row[1]) . "</td>";
echo "<td>" . htmlspecialchars($row[2]) . "</td>";
echo "<td>" . number_format($row[3]) . "円</td>";
echo "</tr>";
}
echo "</table>";
}
例2:データの集計処理
function calculateDepartmentStats($connection) {
$sql = "SELECT department, salary FROM employees";
$stmt = db2_exec($connection, $sql);
$stats = [];
while ($row = db2_fetch_array($stmt)) {
$dept = $row[0];
$salary = $row[1];
if (!isset($stats[$dept])) {
$stats[$dept] = [
'count' => 0,
'total' => 0,
'max' => 0,
'min' => PHP_FLOAT_MAX
];
}
$stats[$dept]['count']++;
$stats[$dept]['total'] += $salary;
$stats[$dept]['max'] = max($stats[$dept]['max'], $salary);
$stats[$dept]['min'] = min($stats[$dept]['min'], $salary);
}
return $stats;
}
例3:CSVエクスポート
function exportToCSV($connection, $filename) {
$sql = "SELECT * FROM employees";
$stmt = db2_exec($connection, $sql);
$fp = fopen($filename, 'w');
// ヘッダー行を書き込む
$headers = ['社員ID', '名前', '部署', '給与'];
fputcsv($fp, $headers);
// データを書き込む
while ($row = db2_fetch_array($stmt)) {
fputcsv($fp, $row);
}
fclose($fp);
}
エラーハンドリング
try {
$sql = "SELECT * FROM employees WHERE department = ?";
$stmt = db2_prepare($connection, $sql);
db2_bind_param($stmt, 1, $department, DB2_PARAM_IN);
if (!db2_execute($stmt)) {
throw new Exception("クエリ実行エラー");
}
$results = [];
while ($row = db2_fetch_array($stmt)) {
if ($row === false) {
throw new Exception("データ取得エラー");
}
$results[] = $row;
}
return $results;
} catch (Exception $e) {
error_log("Error: " . $e->getMessage());
return false;
}
パフォーマンスTips 🚀
- 大量データの処理
// メモリ効率の良い処理
function processLargeData($connection) {
$stmt = db2_exec($connection, "SELECT * FROM large_table");
while ($row = db2_fetch_array($stmt)) {
// 1行ずつ処理
processRow($row);
// メモリを解放
unset($row);
}
}
- 必要なカラムだけ選択
// 良い例
$sql = "SELECT id, name FROM employees";
// 悪い例
$sql = "SELECT * FROM employees";
まとめ
db2_fetch_array
は結果セットから1行ずつデータを配列として取得- 数値インデックスと連想配列の両方の形式でアクセス可能
- 大量データ処理時はメモリ使用に注意
- エラーハンドリングを適切に実装することが重要
このようにdb2_fetch_array
を使用することで、DB2データベースからのデータ取得を効率的に行うことができます。
Happy Coding! 😊