PHP マニュアル
前のページ |  | 次のページ

# oci_bind_by_name

(PHP 5)

oci_bind_by_name -- Oracle プレースホルダーに PHP 変数をバインドする

## 説明

bool oci_bind_by_name ( resource stmt, string ph_name, mixed &variable [, int maxlength [, int type]] )

ocibindbyname() は、PHP 変数 `variable` を Oracle プレースホルダー `ph_name` にバインドします。実行時に入力用、 出力用に使用されるによらず、必要な記憶領域が確保されます。 `length` パラメータは、バインド時の最大長を 設定します。`length` を -1 に設定した場合、 oci_bind_by_name() は `variable` の現在の長さを最大長として設定し ます。

抽象データ型 (LOB/ROWID/BFILE) をバインドする必要がある場合、まず OCINewDescriptor() 関数を使用してこれを確保する必要があります。 `length` は抽象データ型用には 使用されず、-1 を設定する必要があります。 `type` パラメータは、 使用されるディスクリプタをOracle に伝えます。 使用可能な値は次のようになります。

- `SQLT_FILE` - BFILE 用;

- `SQLT_CFILE` - CFILE 用

- `SQLT_CLOB` - CLOB 用

- `SQLT_BLOB` - BLOB 用

- `SQLT_RDD` - ROWID 用

- `SQLT_NTY` - 名前付けされたデータ型用

- `SQLT_INT` - integer 用

- `SQLT_CHR` - VARCHAR 用

- `SQLT_BIN` - RAW カラム用

- `SQLT_LNG` - LONG カラム用

- `SQLT_LBI` - LONG RAW カラム用

- `SQLT_RSET` - カーソル用。これは oci_new_cursor() を使って前もって生成されたもの。

例 1. oci_bind_by_name() の例

`<?php
/* oci_bind_by_name の例 thies at thieso dot net (980221)
3レコードをempに挿入し、挿入の直後にレコードを更新するために
ROWIDを使用します。
*/
$conn = oci_connect("scott", "tiger");
$stmt = oci_parse($conn, "
INSERT INTO
emp (empno, ename)
VALUES
(:empno,:ename)
RETURNING
ROWID
INTO
:rid
");
$data = array(
1111 => "Larry",
2222 => "Bill",
3333 => "Jim"
);
$rowid = oci_new_descriptor($conn, OCI_D_ROWID);
oci_bind_by_name($stmt, ":empno", $empno, 32);
oci_bind_by_name($stmt, ":ename", $ename, 32);
oci_bind_by_name($stmt, ":rid", $rowid, -1, OCI_B_ROWID);
$update = oci_parse($conn, "
UPDATE
emp
SET
sal = :sal
WHERE
ROWID = :rid
");
oci_bind_by_name($update, ":rid", $rowid, -1, OCI_B_ROWID);
oci_bind_by_name($update, ":sal", $sal, 32);
$sal = 10000;
foreach ($data as $empno => $ename) {
oci_execute($stmt);
oci_execute($update);
}
$rowid->free();
oci_free_statement($update);
oci_free_statement($stmt);
$stmt = oci_parse($conn, "
SELECT
*
FROM
emp
WHERE
empno
IN
(1111,2222,3333)
");
oci_execute($stmt);
while ($row = oci_fetch_assoc($stmt)) {
var_dump($row);
}
oci_free_statement($stmt);
/* テーブル emp から "junk" を削除する.... */
$stmt = oci_parse($conn, "
DELETE FROM
emp
WHERE
empno
IN
(1111,2222,3333)
");
oci_execute($stmt);
oci_free_statement($stmt);
oci_close($conn);
?>`

この関数は余分な空白を除去する事を忘れないでください。 次の例を見てください。

例 2. oci_bind_by_name() の例

`<?php $connection = oci_connect('apelsin','kanistra'); $query = "INSERT INTO test_table VALUES(:id, :text)"; $statement = oci_parse($query); oci_bind_by_name($statement, ":id", 1); oci_bind_by_name($statement, ":text", "trailing spaces follow "); oci_execute($statement); /* このコードは DB に文字列 'trailing spaces follow' に余分な空白を付けないで 挿入します。 */ ?>`

例 3. oci_bind_by_name() の例

`<?php $connection = oci_connect('apelsin','kanistra'); $query = "INSERT INTO test_table VALUES(:id, 'trailing spaces follow ')"; $statement = oci_parse($query); oci_bind_by_name($statement, ":id", 1); oci_execute($statement); /* また、このコードは余分な空白を保持したまま 'trailing spaces follow ' を追加します。 */ ?>`

警告
magic_quotes_gpc や addslashes() と oci_bind_by_name() を同時に使用しないでください。 これは、引用符を追加する必要がないためで、 また、magic quote により付加された引用符は、 oci_bind_by_name() が magic quote によ り付加された引用符と意図的に付加されたものを区別できないため、 そのままデータベースに書き込まれるためです。

成功した場合に `TRUE` を、失敗した場合に `FALSE` を返します。

> 注意: PHP バージョン 5.0.0 以前では、代わりに ocibindbyname() を使用しなければなりません。 まだこの名前を使用することができ、下位互換性のため oci_bind_by_name() への別名として残されていますが、 推奨されません。

前のページ | ホーム | 次のページ
oci_bind_array_by_name | 上に戻る | oci_cancel