8 - 3 : 8-3 データベース設計とPDO・SQL安全コーディング規約
🔍 データベース設計とPDO・SQL安全コーディング規約(文字と画像の融合) ▲ 【図】データベース設計とPDO・SQL安全コーディング規約 ...
🔍 データベース設計とPDO・SQL安全コーディング規約(文字と画像の融合)
1
PDOプリペアドステートメント必須
変数値をSQL文字列に直接埋め込まず、必ずプレースホルダー(:id)を使用。
2
テーブルプレフィックス連動
XOOPS_DB_PREFIX . '_モジュール名_テーブル' で動的に決定。
3
utf8mb4_general_ci 統一
テーブル作成時の文字セットと照合順序をutf8mb4に統一。
4
トランザクション処理
複数テーブル更新時は BEGIN / COMMIT / ROLLBACK で整合性を担保。
安全で保守性の高いSQLクエリの記述
TacmicCMS 2.0で独自モジュールやカスタムスクリプトを開発する際は、以下のルールを遵守してください:
- テーブル接頭辞の自動付与:必ず
$db->prefix("{$mydirname}_contents")を通してテーブル名を取得します。 - SQLインジェクション防御:文字列は必ず
$db->quoteString($str)でエスケープするか、PDOプリペアドステートメントを使用します。 - Web変更フラグの意識:INSERT/UPDATE/DELETEを実行する際は、
$db->queryF()を使用するか、事前に$db->allowWebChanges = true;を設定します。
// データベースアクセスの推奨パターン例
$db = icms_db_Factory::instance();
$sql = "SELECT lid, title, updated FROM " . $db->prefix("{$mydirname}_contents") . " WHERE mystatus = 'Active' ORDER BY updated DESC LIMIT 10";
$result = $db->query($sql);
$items = [];
while ($row = $db->fetchArray($result)) {
$items[] = [
'lid' => (int)$row['lid'],
'title' => htmlspecialchars($row['title'], ENT_QUOTES, 'UTF-8'),
'date' => date('Y-m-d H:i', (int)$row['updated']),
];
}
Active
5488 bytes
更新: 2026-10-31 12:19 by Tac Hisaoka