本文へ移動
cccskills
無料GitHub で公開

sql-writing

Use when writing raw SQL — MariaDB/MySQL syntax, parameterization, raw migrations, seeders with `DB::statement`; fires even on a pasted query asking 'why is this slow'.

インストール方法を見る

含まれるファイル(1)

  • SKILL.md3.6 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

sql

Grounded corpus: tuning decisions (indexes, keyset pagination, N+1, trigram search, lock contention) ground via the database corpus — ./scripts-run <skills-root>/corpus-grounding/scripts/ground search --manifest <skills-root>/database/data/manifest.json "<symptom>".

When to use

Use when writing or reviewing raw SQL queries, migrations with raw statements, or seeders with raw SQL.

Do NOT use when:

  • Eloquent/Query Builder queries (use eloquent or database skill)
  • Schema design (use database skill)

Procedure: Write raw SQL

  1. Inspect call site & choose approach — identify every dynamic value flowing into the query, then pick: query builder when possible. Raw SQL only when query builder can't express the query.
  2. Parameterize — Every variable must use ? binding or named :param. Never interpolate PHP variables into SQL strings.
  3. Read the engine, then choose the syntax — check, in order: the project's DB config (config/database.php default connection, DB_CONNECTION), a docker-compose.yml service image, a migration using engine-specific syntax. MySQL and MariaDB share the query-syntax world this skill writes in; PostgreSQL and MSSQL do not. If none of those declare an engine, say so and ask — do not assume one. A query written for the wrong engine passes review and fails in production.
  4. Verify — Run EXPLAIN on complex queries. Check that no PHP interpolation ("$var", '{$var}') appears in SQL.
NEVER build SQL strings with PHP variable interpolation or concatenation.
ALWAYS use parameterized queries or query builder.

Conventions

→ See guideline php/sql.md for parameterization patterns, common mistakes, MariaDB syntax reference.

Quick reference

// ✅ Safe
DB::select('SELECT * FROM users WHERE email = ?', [$email]);

// ❌ SQL injection
DB::select("SELECT * FROM users WHERE email = '{$email}'");

Validate

  1. Verify every variable in SQL uses parameter binding (? or named :param).
  2. Confirm MariaDB/MySQL syntax — not PostgreSQL or MSSQL.
  3. Run EXPLAIN on complex queries to check index usage.
  4. Check that no PHP variable interpolation ("$var", '{$var}') appears in SQL strings.

Output format

  1. Parameterized SQL query using MariaDB/MySQL syntax
  2. EXPLAIN output for performance-critical queries

Gotcha

MySQL and MariaDB share a query-syntax world. They never share a migration one. Same principle as database: one engine for writing a SELECT, two for online-DDL semantics, lock behavior under ALTER, feature availability and EXPLAIN output. Never carry a claim from the second group across the two without naming the engine and version it was measured on.

  • MariaDB and MySQL have subtle syntax differences.
  • The model writes $variable in SQL strings instead of ? placeholders.
  • GROUP BY with ONLY_FULL_GROUP_BY requires all non-aggregated columns.
  • Use SQL types (NULL, 1/0, JSON_ARRAY()) — not PHP equivalents.

Do NOT

  • Do NOT interpolate PHP variables into SQL strings — always parameterize.
  • Do NOT use PHP syntax (arrays, booleans, null) in raw SQL — use SQL equivalents.
  • Do NOT write raw SQL when the query builder can express the same thing clearly.

Auto-trigger keywords

  • raw SQL
  • SQL query
  • parameterized query
  • MariaDB syntax
  • SQL injection

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.

日本語の概要は準備中です。原文の説明を表示しています。

event4u-app/agent-config112026年10月11日 更新

Use when defining or auditing the activation event — aha-moment selection, retention correlation, falsifiable definition. Triggers on 'what is our aha moment', 'redefine activation'.

日本語の概要は準備中です。原文の説明を表示しています。

event4u-app/agent-config112026年10月11日 更新

Use when capturing an architectural decision — file naming, next ADR number, Status / Context / Decision / Consequences, index regen; fires even without saying 'ADR'.

日本語の概要は準備中です。原文の説明を表示しています。

event4u-app/agent-config112026年10月11日 更新

Adversarial critique — devil's advocate, stress-test, honest teardown ('poke holes', 'be brutal', 'was hältst du davon'); explicit request only. Routine code or design review → code-review.

日本語の概要は準備中です。原文の説明を表示しています。

event4u-app/agent-config112026年10月11日 更新

Use when reading, creating, or updating agent documentation, module docs, roadmaps, or AGENTS.md. Understands the full .augment/, agents/, and copilot-instructions structure.

日本語の概要は準備中です。原文の説明を表示しています。

event4u-app/agent-config112026年10月11日 更新

Use for an adversarial red-team / blue-team / auditor review of an AI agent's CONFIG + behaviour (rules, skills, MCP, hooks, permissions) — attack-chain → defensive-gap list, not a code audit.

日本語の概要は準備中です。原文の説明を表示しています。

event4u-app/agent-config112026年10月11日 更新

event4u-app のスキルをすべて見る

このスキルの問題を報告する