Curry
PHP Framework

core

db

html

utility

SqlUpdate

クラス概要

SqlUpdateはSQLのUPDATE文構築の機能を提供します。
通常、SqlUpdateのインスタンスはModel::updateメソッドにより取得します。これにより、Modelに設定されているテーブルに対するUPDATE文構築オブジェクトとして機能することになります。
UPDATE文で更新する行の更新対象フィールドの値は、キーと値の組み合わせの連想配列を引数にvaluesメソッドによって設定します。更新対象レコードの条件指定はwhereメソッドにより設定し、executeメソッドにより、SQLを実行します。

executeメソッドの実行時にSQL文が構築されますが、その際、valuesによって設定された値はINSERT文中に直接記述されず、プレースホルダを利用して実行されます。そのため、SQLインジェクションに対して安全です。

SqlInsertの各メソッドはそのほとんどが自分自身のインスタンスを返します。そのため、メソッドチェーンを利用して柔軟なコーディングが可能です。

クラスファイル位置

curry/db/sql_update.php

フィールド

公開されるフィールドはありません。

メソッド

メソッド名 アクセス 概要
where public 更新対象のレコードの抽出条件を設定します。
whereメソッドはSqlSelect::whereメソッドと全く同様の指定方法です。
詳細はSqlSelect::whereを参照してください。
orWhere public 更新対象のレコードの抽出条件をOR結合によって設定します。
orWhereメソッドはSqlSelect::orWhereメソッドと全く同様の指定方法です。
詳細はSqlSelect::orWhereを参照してください。
values public UPDATE文で更新するフィールドと値を指定します。
指定方法は2つあります。
一つはレコードの各フィールドの値を、フィールド名と値の組み合わせの連想配列で指定する方法。この場合、複数フィールドを一度に指定できます。
もう一つは第一引数にフィールド名、第二引数に値を指定する方法です。この場合、一度に一つのフィールドしか指定できませんが、複数回、メソッドを実行することで複数指定は可能です。

値にnullを設定したフィールドにはテーブルのフィールドに対してもnullをセットします。
連想配列のキーには、UPDATE対象のテーブルに存在しない列を含めないように注意してください。この場合、SQLエラーとなり、PDOExceptionが発生します。
params public whereメソッドで条件文をプレースホルダを含めて直接記述した場合に、そのプレースホルダに対する値を連想配列で指定します。
execute public valuesメソッドによって設定された更新値とwhereメソッドによって設定された条件をもとにUPDATE文を構築し、実行します。
このメソッドではWHERE条件が設定されていない場合、例外が発生します。これは誤って全件更新されるのを防ぐ為です。敢えて全件更新したい場合はexecuteAllメソッドを使用してください。
increment public パラメーターで指定した数値フィールドの値を+1します。複数のフィールドの同時指定も可能です。
対象レコードは事前にwhereメソッドによって設定します。
このメソッド実行時はvaluesメソッドによって設定された値は無視されます。
getSql public valuesメソッドによって設定された更新値とwhereメソッドによって設定された条件をもとにUPDATE文を構築し、返します。
getParams public UPDATE文に対するパラメーターを取得します。

オーバーライドメソッド()

メソッド名 アクセス 概要
where public 更新対象のレコードの抽出条件を設定します。
whereメソッドはSqlSelect::whereメソッドと全く同様の指定方法です。
詳細はSqlSelect::whereを参照してください。
orWhere public 更新対象のレコードの抽出条件をOR結合によって設定します。
orWhereメソッドはSqlSelect::orWhereメソッドと全く同様の指定方法です。
詳細はSqlSelect::orWhereを参照してください。
params public whereメソッドで条件文をプレースホルダを含めて直接記述した場合に、そのプレースホルダに対する値を連想配列で指定します。
execute public valuesメソッドによって設定された更新値とwhereメソッドによって設定された条件をもとにUPDATE文を構築し、実行します。
このメソッドではWHERE条件が設定されていない場合、例外が発生します。これは誤って全件更新されるのを防ぐ為です。敢えて全件更新したい場合はexecuteAllメソッドを使用してください。
getSql public valuesメソッドによって設定された更新値とwhereメソッドによって設定された条件をもとにUPDATE文を構築し、返します。
getParams public UPDATE文に対するパラメーターを取得します。

継承メソッド()

メソッド名 アクセス 概要
__construct public コンストラクタです。
enablePreparing public 同一インスタンスで連続してSQLを実行した場合、1回目の実行時にプリペアを行ってステートメントを生成し、以降の実行は生成されたプリペアドステートメントを利用して実行しますが、
このメソッドではこのプリペアドステートメントを利用するかしないかを設定します。

誤解してはいけないのが、Curryでは基本的に全てのSQLの実行はプリペアしています。
このメソッドで行う設定は、最初の1回目のプリペアドステートメントを使い続けるか、
それとも都度再生成するかの違いです。
最利用する方が効率が良いので、通常は特に意識する必要はなく、初期値のままで構いません。

※バージョン1.1.0以降
clearConditions public whereやorder等、各メソッドで設定された条件を全てクリアします。
getStatement public 直前に実行したSQLのプリペアドステートメントを取得します。
whereNot public 否定のWHERE条件を指定します。

whereメソッドとの違いは、フィールド名と値の比較演算子が"="ではなく"<>"になるということです。
値がnullの場合は"IS NULL"ではなく"IS NOT NULL"になります。

$select->whereNot('age', 30);
$select->whereNot('name', null);
→WHERE (age <> 30) AND (name IS NOT NULL)
orWhereNot public 否定のWHERE条件指定をOR結合で設定します。
whereNotのOR版です。

$select->whereNot('age', 30);
$select->orWhereNot('name', null);
→WHERE (age <> 30) OR (name IS NOT NULL)

orWhereメソッドと同様、最初の一つ目の条件指定時はwhereNotと違いはありません。
whereLike public LIKE演算子による曖昧条件の指定を行います。
このメソッドで値に"%"を含めるとあいまい条件検索が可能になります。

$select->where('age', 30);
$select->whereLike('name', 'ta%');
→WHERE (age = 30) AND (name LIKE 'ta%')
orWhereLike public LIKE演算子による曖昧条件をOR結合で指定します。
whereLikeメソッドのOR版です。

$select->where('age', 30);
$select->orWhereLike('name', 'ta%');
→WHERE (age = 30) OR (name LIKE 'ta%')

orWhereメソッドと同様、最初の一つ目の条件指定時はwhereLikeと違いはありません。
whereNotLike public LIKE演算子による否定の曖昧条件の指定を行います。
whereLikeの否定条件版です。

$select->where('age', 30);
$select->whereNotLike('name', 'ta%');
→WHERE (age = 30) AND (name NOT LIKE 'ta%')
orWhereNotLike public LIKE演算子による否定の曖昧条件をOR結合で指定します。
whereNoLikeのOR版です。

$select->where('age', 30);
$select->orWhereNotLike('name', 'ta%');
→WHERE (age = 30) OR (name NOT LIKE 'ta%')

orWhereメソッドと同様、最初の一つ目の条件指定時はwhereLikeと違いはありません。
whereIn public IN演算子による条件の指定を行います。
第二引数に複数の値を配列で指定することにより、すべての値のいずれかに合致する条件を指定することができます。

$ages = array(20, 21, 22, 23, 24, 25);
$select->where('name', 'taro');
$select->whereIn('age', $ages);
→WHERE (name = 'taro') AND (age IN (20, 21, 22, 23, 24, 25))
orWhereIn public IN演算子による条件をOR結合で指定します。
whereInのOR版です。

$ages = array(20, 21, 22, 23, 24, 25);
$select->where('name', 'taro');
$select->orWhereIn('age', $ages);
→WHERE (name = 'taro') OR (age IN (20, 21, 22, 23, 24, 25))

orWhereメソッドと同様、最初の一つ目の条件指定時はwhereInと違いはありません。
whereNotIn public IN演算子による否定の条件の指定を行います。
whereInの否定条件版です。
第二引数に複数の値を配列で指定することにより、すべての値のどれにも合致しない条件を指定することができます。

$ages = array(20, 21, 22, 23, 24, 25);
$select->where('name', 'taro');
$select->whereNotIn('age', $ages);
→WHERE (name = 'taro') AND (age NOT IN (20, 21, 22, 23, 24, 25))
orWhereNotIn public N演算子による否定の条件をOR結合で指定します。
whereNoInのOR版です。

$ages = array(20, 21, 22, 23, 24, 25);
$select->where('name', 'taro');
$select->orWhereNotIn('age', $ages);
→WHERE (name = 'taro') OR (age NOT IN (20, 21, 22, 23, 24, 25))
whereGt public 大なりのWHERE条件を指定します。
フィールド名と値の比較演算子を">"とし、対象列が条件指定した値より大きい事を条件とする場合に使用します。

$select->where('name', 'taro');
$select->whereGt('age', 30);
→WHERE (name = 'taro') AND (age > 30)

※バージョン1.2.0以降
whereLt public 小なりのWHERE条件を指定します。
フィールド名と値の比較演算子を"<"とし、対象列が条件指定した値より小さい事を条件とする場合に使用します。

$select->where('name', 'taro');
$select->whereLt('age', 30);
→WHERE (name = 'taro') AND (age < 30)

※バージョン1.2.0以降
whereGe public 大なりイコールのWHERE条件を指定します。
フィールド名と値の比較演算子を">="とし、対象列が条件指定した値より大きい、または等しい事を条件とする場合に使用します。

$select->where('name', 'taro');
$select->whereGe('age', 30);
→WHERE (name = 'taro') AND (age >= 30)

※バージョン1.2.0以降
whereLe public 小なりイコールのWHERE条件を指定します。
フィールド名と値の比較演算子を"<="とし、対象列が条件指定した値より小さい、または等しい事を条する場合に使用します。

$select->where('name', 'taro');
$select->whereLe('age', 30);
→WHERE (name = 'taro') AND (age <= 30)

※バージョン1.2.0以降
orWhereGt public 大なりの条件指定をOR結合で指定します。
whereGtメソッドのOR版です。

$select->where('age', 30);
$select->orWhereGt('name', 'taro');
→WHERE (age = 30) OR (name > 'taro')


※バージョン1.2.0以降
orWhereLt public 小なりの条件指定をOR結合で指定します。
whereLtメソッドのOR版です。

$select->where('age', 30);
$select->orWhereLt('name', 'taro');
→WHERE (age = 30) OR (name < 'taro')

※バージョン1.2.0以降
orWhereGe public 大なりイコールの条件指定をOR結合で指定します。
whereGeメソッドのOR版です。

$select->where('age', 30);
$select->orWhereGe('name', 'taro');
→WHERE (age = 30) OR (name >= 'taro')

※バージョン1.2.0以降
orWhereLe public 小なりイコールの条件指定をOR結合で指定します。
whereLeメソッドのOR版です。

$select->where('age', 30);
$select->orWhereLe('name', 'taro');
→WHERE (age = 30) OR (name <= 'taro')

※バージョン1.2.0以降
whereBetween public 範囲指定のWHERE条件を設定します。
BETWEEN演算子を使用し、対象列が指定した2つの値の範囲内であることを条件とする場合に指定します。

$select->where('name', 'taro');
$select->whereBetween('age', 30, 40);
→WHERE (name = 'taro') AND (age BETWEEN 30 AND 40)

※バージョン1.2.0以降
whereNotBetween public 否定の範囲指定のWHERE条件を設定します。
BETWEEN演算子を使用し、対象列が指定した2つの値の範囲外であることを条件とする場合に指定します。

$select->where('name', 'taro');
$select->whereNotBetween('age', 30, 40);
→WHERE (name = 'taro') AND (age NOT BETWEEN 30 AND 40)

※バージョン1.2.0以降
orWhereBetween public 範囲指定のWHERE条件をOR結合で設定します。
whereBetweenのOR版です。

$select->where('name', 'taro');
$select->orWhereBetween('age', 30, 40);
→WHERE (name = 'taro') OR (age BETWEEN 30 AND 40)

※バージョン1.2.0以降
orWhereNotBetween public 否定の範囲指定のWHERE条件をOR結合で設定します。
whereNotBetweenのOR版です。

$select->where('name', 'taro');
$select->orWhereNotBetween('age', 30, 40);
→WHERE (name = 'taro') OR (age NOT BETWEEN 30 AND 40)

※バージョン1.2.0以降