NaifyDb\QueryBuilder\WhereBuilder クラス
WHERE 句をメソッドチェーンで組み立て、SQL 文字列とバインド値を返す
Connection なしで使える。検索フォームの条件組み立てなど、WHERE 句だけ必要な場面に適している。
カラム名・テーブル名・SQL式は自動エスケープ・クオート・存在確認しない。 条件値や保存値はSQL指定と区別し、プレースホルダに分離して実行時にバインドする。 外部入力から指定を選ぶ場合は、呼び出し側の許可リストで固定のSQL指定へ対応付ける。 実カラム名の存在確認には、必要に応じてConnection::describeTable()とTableSchema::hasColumn()を使う。 SQL式や別名の解析、使用を許可するカラムの選別は呼び出し側で行う。
使用例
$where = new WhereBuilder();
if ($name) $where->where('name', 'LIKE', "%{$name}%");
if ($status !== null) $where->where('status', '=', $status);
[$sql, $bindings] = $where->build();
// $sql = " WHERE name LIKE ? AND status = ?"
// $bindings = ['%test%', 1]
設計意図
カラム指定は自動エスケープ・存在確認しない。式や別名の意味を変えないため、自動クオートもしない。
外部入力は直接渡さず、許可リストで固定の指定へ対応付ける。実カラム名の存在確認が必要な場合は、
Connection::describeTable()で取得したTableSchema::hasColumn()を使う。SQL式や別名の安全性は判定しない。
カラム指定は自動エスケープ・存在確認しない。式や別名の意味を変えないため、自動クオートもしない。
外部入力は直接渡さず、許可リストで固定の指定へ対応付ける。実カラム名の存在確認が必要な場合は、
Connection::describeTable()で取得したTableSchema::hasColumn()を使う。SQL式や別名の安全性は判定しない。
カラム指定は自動エスケープ・存在確認しない。式や別名の意味を変えないため、自動クオートもしない。
外部入力は直接渡さず、許可リストで固定の指定へ対応付ける。実カラム名の存在確認が必要な場合は、
Connection::describeTable()で取得したTableSchema::hasColumn()を使う。SQL式や別名の安全性は判定しない。
カラム指定は自動エスケープ・存在確認しない。式や別名の意味を変えないため、自動クオートもしない。
外部入力は直接渡さず、許可リストで固定の指定へ対応付ける。実カラム名の存在確認が必要な場合は、
Connection::describeTable()で取得したTableSchema::hasColumn()を使う。SQL式や別名の安全性は判定しない。
カラム指定は自動エスケープ・存在確認しない。式や別名の意味を変えないため、自動クオートもしない。
外部入力は直接渡さず、許可リストで固定の指定へ対応付ける。実カラム名の存在確認が必要な場合は、
Connection::describeTable()で取得したTableSchema::hasColumn()を使う。SQL式や別名の安全性は判定しない。
プロパティ
| 名前 | 型 | 説明 |
|---|---|---|
protected
$wheres
|
array |
追加順の WHERE 条件一覧 |
メソッド
| メソッド | 説明 |
|---|---|
public
where(string $column, string $operator, mixed $value): static
|
AND 条件を追加する
カラム指定は自動エスケープ・存在確認しない。式や別名の意味を変えないため、自動クオートもしない。
外部入力は直接渡さず、許可リストで固定の指定へ対応付ける。実カラム名の存在確認が必要な場合は、
Connection::describeTable()で取得したTableSchema::hasColumn()を使う。SQL式や別名の安全性は判定しない。
|
public
orWhere(string $column, string $operator, mixed $value): static
|
OR 条件を追加する
カラム指定は自動エスケープ・存在確認しない。式や別名の意味を変えないため、自動クオートもしない。
外部入力は直接渡さず、許可リストで固定の指定へ対応付ける。実カラム名の存在確認が必要な場合は、
Connection::describeTable()で取得したTableSchema::hasColumn()を使う。SQL式や別名の安全性は判定しない。
|
public
whereIn(string $column, array $values): static
|
IN 条件を追加する
カラム指定は自動エスケープ・存在確認しない。式や別名の意味を変えないため、自動クオートもしない。
外部入力は直接渡さず、許可リストで固定の指定へ対応付ける。実カラム名の存在確認が必要な場合は、
Connection::describeTable()で取得したTableSchema::hasColumn()を使う。SQL式や別名の安全性は判定しない。
|
public
whereNull(string $column): static
|
IS NULL 条件を追加する
カラム指定は自動エスケープ・存在確認しない。式や別名の意味を変えないため、自動クオートもしない。
外部入力は直接渡さず、許可リストで固定の指定へ対応付ける。実カラム名の存在確認が必要な場合は、
Connection::describeTable()で取得したTableSchema::hasColumn()を使う。SQL式や別名の安全性は判定しない。
|
public
whereNotNull(string $column): static
|
IS NOT NULL 条件を追加する
カラム指定は自動エスケープ・存在確認しない。式や別名の意味を変えないため、自動クオートもしない。
外部入力は直接渡さず、許可リストで固定の指定へ対応付ける。実カラム名の存在確認が必要な場合は、
Connection::describeTable()で取得したTableSchema::hasColumn()を使う。SQL式や別名の安全性は判定しない。
|
public
hasConditions(): bool
|
条件が追加されているか |
public
build(): array
|
WHERE 句と バインドパラメータを組み立てる |
private
normalizeOperator(string $operator): string
|
演算子を正規化して検証する |