PHP Unconference Europe 2015

odbc_setoption

(PHP 4, PHP 5)

odbc_setoptionODBC の設定を変更する

説明

bool odbc_setoption ( resource $id , int $function , int $option , int $param )

この関数により特定の接続またはクエリー結果に関する ODBC オプションを変更することが可能となります。この関数は、気まぐれな ODBC ドライバの問題に対処する際の道具として作成されたものです。自分が ODBC プログラマであり、様々なオプションが有する効果を理解している場合にのみこの関数を使用するべきでしょう。 使用可能な全てのオプションおよび値を理解するためには、良い ODBC リファレンスが必要です。ドライバーのバージョンが違うと、 サポートされるオプションも異なります。

この関数の効果は ODBC ドライバに依存する可能性があるので、 一般に公開するスクリプトでは、この関数の使用は避けましょう。 また、いくつかの ODBC オプションはこの関数では利用できません。 それは、これらを接続の確立またはクエリの準備の前に設定する必要があるからです。 しかし、特定の業務において自分の上司が商用製品の使用を指示しなかったために PHP を使用する場合、このことは実際的な問題となります。

パラメータ

id

設定を変更する接続 ID または 結果 ID。SQLSetConnectOption() の場合、これは接続 ID です。 SQLSetStmtOption() の場合、これは結果 ID です。

function

使用する ODBC 関数。 値は SQLSetConnectOption() の場合 1、 SQLSetStmtOption() の場合 2 である必要があります。

option

設定するオプション。

param

指定した option の値。

返り値

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

例1 odbc_setoption() の例

<?php
// 1. SQLSetConnectOption() のオプション 102 は SQL_AUTOCOMMIT です。
//    SQL_AUTOCOMMIT の値 1 は SQL_AUTOCOMMIT_ON です。
//    この例は odbc_autocommit($conn, true); と同じ結果
//    となります。

odbc_setoption($conn11021);

// 2. SQLSetStmtOption() のオプション 0 は SQL_QUERY_TIMEOUT です。
//    この例は 30 秒後に時間切れとなるクエリーを設定します。

$result odbc_prepare($conn$sql);
odbc_setoption($result2030);
odbc_execute($result);
?>

add a note add a note

User Contributed Notes 1 note

up
-1
egil at wp dot pl
5 years ago
Some options for Microsoft SQL Server ODBC:
1 - (SQL_MAX_ROWS) show top x rows
6 - (SQL_CURSOR_TYPE) zmiana kursora - ma działać dopiero w PHP 5.3

You can "translate" constant names (found on e.g. Microsoft website) to appropriate values using this page:
http://www.freepascal.org/docs-html/packages/odbcsql/index-2.html

BTW. If anyone is banging his head about "cursor type changed" warning while using execute with ORDER BY clause, then just use exec for now (remember to addslashes for yourself). In PHP 5.3 a Bug #43668 will be fixed and it will allow you to change a cursor type to SQL_CUR_USE_ODBC.

Note that you could also try to select a cursor type in odbc_connect, but that didn't work for me (much more problems appeared then it solved).
To Top