シーケンスは、データレコード用にユニークな ID を取得する手段です。 多くの業務を例えば MySQL で行っている場合、シーケンスは、 AUTO_INCREMENT を行う別の手段と考えであると考えて下さい。
シーケンス処理はかなり簡単で、最初に ID をリクエストし、 作成する新規レコードの ID フィールドに値を挿入します。 全てのテーブルに複数のシーケンスを有することが可能です。 ただし、特定のテーブルについては 同じシーケンスを常に使用する必要があることに注意して下さい。 このユニークな ID の値を取得するには、nextId() を使用してください。 もし、シーケンスが存在しない場合は、自動で作成されます。
シーケンスは、 nextId() がコールされるたびに 自動でインクリメントされます。
シーケンスの使用法
<?php
// $db という名前の DB オブジェクトが作成済みであると仮定します...
$id = $db->nextId('mySequence');
if (PEAR::isError($id)) {
die($id->getMessage());
}
// INSERT クエリで ID を使用します
$res =& $db->query("INSERT INTO myTable (id, text) VALUES ($id, 'foo')");
?>
PEAR DB のシーケンスメソッドを使用する場合には、シーケンスの作成も 含めたすべての処理にこれらのメソッドを用いることを強く推奨します。 DBMS で直接作成したシーケンスに対して PEAR DB のメソッドで アクセスすることは避けてください。
もし何らかの理由があってこれが避けられない場合には、 PEAR DB のすべてのシーケンスメソッドに渡される引数
$seq_name
は、DB が元となる DBMS をコールする 前に変更されるということを知っておいてください。
$seq_name
は、PHP の sprintf() 関数を使用して渡されます。この際にseqname_format
オプションを sprintf() のフォーマット引数として使用します。 デフォルトのseqname_format
は%s_seq
です。例えばperson_id_sequence
を$seq_name
に指定したとすると、シーケンスの 作成/アクセス/更新の際に PEAR DB はその名前をperson_id_sequence_seq
に変更します。
seqname_format
は、 connect() の際か、あるいは setOption() を使用して変更可能です。シーケンス名の中にクォートしないとクエリで使用できない文字がある場合は、
seqname_format
を変更して シーケンス名をクォートした形式で表すようにする必要があります。 たとえば、PostgreSQL でテーブル名に大文字を使っている場合は、 クエリでは"%s_seq"
(クォートに注意) としないとうまく動作しません。