|
Oracle関数(Ora_XXXX関数)は推奨されない関数となっています。PDO関数が使えない・使わない場合は、OCI8関数(現在のOracle関数)を使いましょう。
Oracle関数の場合、基本的に以下の構文となります。SELECTの場合、FETCHしながらデータをTABLE形式やプルダウンのOPTIONタグなどに加工・表示することになります。
パラメータを伴うSQL文を実行する場合、必ずパラメータをバインドするようにしましょう。
<?php
$conn = Ora_Logon("scott@orcl", "tiger");
$cursor = Ora_Open($conn);
$sql = "...";
$ret = Ora_Parse($cursor, $sql);
$ncols = Ora_Exec($cursor);
Ora_Close($cursor);
Ora_Logoff($conn);
?>
Oracle8関数の場合、「Ora_XXXX」と異なり、カーソル関連の操作がありません。また、OCIResult のカラム名は、大文字で指定します。
<?php
$conn = OCILogon("scott", "tiger", "orcl");
$sql = "...";
$sql = OCIParse($conn, $sql);
$ncols = OCIExecute($sql, OCI_DEFAULT);
While (OCIFetch($sql)) {
$tmp = OCIResult($sql, "COLUMN_NAME");
:
}
OCIFreeStatement($sql);
OCILogoff($conn);
?>
以上の基本形だけで、「何件目から何件目だけを表示する」というサンプルを作ってみると、こんな感じになります(OCI8関数の場合)。
<?php
$COUNT_PER_PAGE = 10;
$conn = OCILogon("scott", "tiger", "orcl");
$sql = "SELECT COUNT(*) CNT FROM ...";
$sql = OCIParse($conn, $sql);
OCIExecute($sql, OCI_DEFAULT);
$row_count = OCIResult($sql, "CNT");
OCIFreeStatement($sql);
$sql = "SELECT ... FROM ...";
$sql = OCIParse($conn, $sql);
OCIExecute($sql, OCI_DEFAULT);
$page_start = $page * $COUNT_PER_PAGE;
$page_end = ($row_count < ($page + 1) * CNT_PER_PAGE) ? $row_count : ($page + 1) * CNT_PER_PAGE;
while (OCIFetch($sql)) {
$current_row = OCIRowCount($sql);
if ( $page_start <= $current_row && $current_row < $page_end) {
echo OCIResult($sql, "...");
:
}
}
OCIFreeStatement($sql);
OCILogoff($conn);
?>
|