PHP: Sybase 関数 - Manual
PHP  
downloads | documentation | faq | getting help | mailing lists | | php.net sites | links | my php.net 
search for in the  
<wordwrapsybase_affected_rows>
view the version of this page
Last updated: Tue, 21 Dec 2004

CXVII. Sybase 関数

インストール手順

Sybase-DBサポートを有効にするには、PHPのconfigure で --with-sybase[=DIR]を指定して下さ い。DIRはSybaseのホームディレクトリで、デフォルトは /home/sybaseです。 Sybase-CTサポートを有効にするには、PHPのconfigureで --with-sybase-ct[=DIR]を指定して下 さい。DIRはSybaseのホームディレクトリで、デフォルトは /home/sybaseです。

実行用の設定

これらの関数の動作は、php.iniの設定により変化します。

表 1. Sybase設定オプション

名前デフォルト変更の可否
sybase.allow_persistent"On"PHP_INI_SYSTEM
sybase.max_persistent"-1"PHP_INI_SYSTEM
sybase.max_links"-1"PHP_INI_SYSTEM
sybase.interface_file "/usr/sybase/interfaces"PHP_INI_SYSTEM
sybase.min_error_severity"10"PHP_INI_ALL
sybase.min_message_severity"10"PHP_INI_ALL
sybase.compatability_mode"Off"PHP_INI_SYSTEM
magic_quotes_sybase"Off"PHP_INI_ALL

以下に設定ディレクティブの簡単な説明を示します。

sybase.allow_persistent boolean

持続的なSybase接続を使用可能とするかどうか。

sybase.max_persistent integer

プロセス毎の持続的なSybase接続の最大数。-1は制限無しを意味します。

sybase.max_links integer

プロセス毎の持続的接続を含むSybase接続の最大数。 ー1は制限無しを意味します。

sybase.min_error_severity integer

出力するエラーの重要度の下限。

sybase.min_message_severity integer

出力するエラーの重要度の下限。

sybase.compatability_mode boolean

PHP 3.0の古いバージョンとの互換モード。onの場合、結果を 文字列データとして処理する代わりにPHPが自動的にSybaseの型に基づ き結果の型を決めるようにします。この互換モードがサポートされ続け ることはおそらくないため、自分のコードに必要な変更を行い、このオ プションをoffにして下さい。

magic_quotes_sybase boolean

magic_quotes_sybaseがonの場合、 magic_quotes_gpc またはmagic_quotes_runtime が有効の時にシングルクオートはバックスラッシュではなくシングルク オートでエスケープされます。

注意: magic_quotes_sybaseがONの時に、 magic_quotes_gpcの設定を完全に上書きする ことに注意して下さい。この場合、たとえ magic_quotes_gpcが有効の場合でも ダブルクオートもバックスラッシュもNULもエスケープされません。

表 2. Sybase-CT設定オプション

名前デフォルト変更の可否
sybct.allow_persistent"On"PHP_INI_SYSTEM
sybct.max_persistent"-1"PHP_INI_SYSTEM
sybct.max_links"-1"PHP_INI_SYSTEM
sybct.min_server_severity"10"PHP_INI_ALL
sybct.min_client_severity"10"PHP_INI_ALL
sybct.hostnameNULLPHP_INI_ALL

以下に設定ディレクティブに関する簡単な説明を示します。

sybct.allow_persistent boolean

持続的なSybase-CT接続を使用可能にするかどうか。 デフォルトは、onです。

sybct.max_persistent integer

プロセス毎の持続的なSybase接続の最大数。-1は制限無しを意味します。

sybct.max_links integer

プロセス毎の持続的接続を含むSybase-CT接続の最大数。 ー1は制限無しを意味します。

sybct.min_server_severity integer

sybct.min_server_severity以上の重要度を有するサーバーメッセージ は警告を出力します。この値は、スクリプト内で sybase_min_server_severity()をコールすること により設定することも可能です。デフォルトは10で、 重要度がこの値以上の情報が出力されます。

sybct.min_client_severity integer

sybct.min_client_severity以上の重要度を有する クライアントライブラリメッセージが警告として出力されます。 この値は、スクリプトで sybase_min_client_severity()をコールすること により設定することも可能です。デフォルトは10で、 出力を結果的に無効にしています。

sybct.hostname string

sp_whoで表示するための接続を行うホスト名。デフォルトはありません。

PHP_INI_*定数に関する詳細と定義については、 ini_set()を参照して下さい。

定義済みの定数

この拡張モジュールは定数を全く定義しません。

目次
sybase_affected_rows -- 直近のクエリーで変更された行の数を得る
sybase_close -- Sybase 接続を閉じます
sybase_connect -- Sybase サーバー接続をオープンします
sybase_data_seek -- 内部行ポインタを移動します
sybase_deadlock_retry_count -- Sets the deadlock retry count
sybase_fetch_array -- 行を配列として取り込みます
sybase_fetch_assoc -- Fetch a result row as an associative array
sybase_fetch_field -- フィールド情報を得ます
sybase_fetch_object -- 行をオブジェクトとして取り込みます
sybase_fetch_row -- 行を配列として得ます
sybase_field_seek -- フィールドオフセットを設定します
sybase_free_result -- 結果メモリを開放します
sybase_get_last_message -- サーバーから直近のメッセージを返す
sybase_min_client_severity -- クライアントのseverityを最小に設定する
sybase_min_error_severity -- エラーのseverityを最小に設定する
sybase_min_message_severity -- メッセージのチェックを最小に設定する
sybase_min_server_severity -- サーバーチェックを最小に設定する
sybase_num_fields -- 結果におけるフィールドの数を得ます
sybase_num_rows -- 結果における行の数を得ます
sybase_pconnect -- Sybaseの持続的な接続をオープンします
sybase_query -- Sybase クエリーを送信します
sybase_result -- 結果データを得ます
sybase_select_db -- Sybase データベースを選択します
sybase_set_message_handler -- Sets the handler called when a server message is raised
sybase_unbuffered_query -- Send a Sybase query and do not block


add a note add a note User Contributed Notes
Sybase 関数
punkarruso at despammed dot com
14-Dec-2004 01:50
I just want to report that, like explained in bug #27562, selective stored procedures (like sp_helpdb) don't return a resultset with freeTDS >= 0.62. (using php <= 4.3.9)
If you have installed such releases of freeTDS, downgrade to 0.61.x.
matt dot sawyer at gmail dot com
30-Nov-2004 04:46
I've noticed (after days of frustration) that setting the sybase.interface_file to a location other than the default ($SYBASE/interfaces) in php.ini doesn't always work.  I finally gave up and copied my interface entries to the default location, and it works consistently now.  (This is even with sybase.interface_file still set to the non-default location).
greg dot fenton at ianywhere dot com
22-Nov-2004 10:07
For Sybase/iAnywhere SQL Anywhere (a.k.a Adaptive Server Anywhere, a.k.a. ASA), you likely should try the SQLAnywhere PHP module [which now ships with ASA as of 9.0.2]:

  

ASA can work with TDS (Open Client), but if performance is something you care about you likely want to use the native ASA interface.  For info/help, consider posting to sybase.public.sqlanywhere.general or sybase.public.sqlanywhere.linux  ()

Hope this helps,
greg.fenton
info(at)sovall(dot)cz
04-Aug-2004 11:10
This is way to compile Sybase ASE 12.5 with PHP5.0.0 and Apache 2 on Linux:
- install apache
- install ase1252_de_linux.tgz to /opt/sybase-12.5
- shell:# ln -s /opt/sybase-12.5 /opt/sybase
- edit phpsrc/configure and remove all '-linsck'
- edit phpsrc/ext/sybase-ct/php_sybase_ct.h and change CTLIB_VERSION CS_VERSION_100 to 125
- shell:# export SYBASE=/opt/sybase
- phpsrc/configure --with-sybase-ct=/opt/sybase/OCS-12_5
- phpsrc/make and make install
- edit apache2/conf/httpd.conf and add AddType... .php
- create /opt/sybase/interfaces file
SERVERNAME
[tab!]master tcp ether ipAddress port
[tab!]query tcp ether ipAddress port
- apache2/bin/apachectl start

I hope, that I save your time.
1rsv_sign_mail.ru (stas_aka_rsv)
24-Mar-2004 06:20
There is a way how to force php work with both php_mssql.dll and php_sybase_ct.dll. Just open php_sybase_ct.dll in any editor (dont use MS WORD :0) ) and replace all "mssql_" on something like that "masql_".
After that there will not be warnings about double function definitions and php can use php_sybase_ct.dll to access to sybase and php_mssql.dll to access to mssql.
The reason why I did such thing is that I couldnt connect to mssql using php_sybase_ct.dll.
ms at klmoberg dot no
15-Mar-2004 01:10
I solved my connection problems by setting ENV variables directly in PHP.

putenv ("SYBASE=/opt/sybase");
putenv ("SYBPLATFORM=linux");
putenv ("LD_LIBRARY_PATH=/opt/sybase/lib");
putenv ("LC_ALL=default");
putenv ("PATH=\"/opt/sybase/bin:$PATH\"");
putenv ("DSQUERY=SYBASE");

--
Martin Sarajervi
ddc at portalframework dot com
07-Oct-2002 01:05
If you would like to use the wide table support of Sybase ASE 12.5, take advantage of XML/XQL embedded in the database and use varchars of more than 255 char, you'll need to recompile PHP changing this line in the
   php_sybase_ct.h file:

From:

#define CTLIB_VERSION CS_VERSION_100

To:

#define CTLIB_VERSION CS_VERSION_125

This will only run if you have installed Sybase ASE Open Client v. 12.5 and configured PHP telling it where the OCS is... (./configure --with-sybase-ct=$SYBASE_HOME/OCS [...])

--
Diego Dal Cero.
aj at bootsector dot org
04-Sep-2002 09:10
A note for all who may be struggling...  Microsoft did away with the ct-lib support in SQL Server 2000.

I played with it and found a couple of articles related to it on google.  A workaround/different method would be preferrable.  Anybody?
AnatolyKoval at hotmail dot com
17-Jun-2002 10:25
The way to use Sybase Adaptive Server Anywhere+PHP+Apache on Unix
ddc at portalframework.com
14-May-2002 06:19
Compiling PHP with Sybase ASE 12.5 on Linux.

Assuming that you have installed the Sybase ASE 12.5 client in linux, and you have the SYBASE env variable set, you can compile PHP >= 4.0.6 with Sybase ASE 12.5.
Just use:

  --with-sybase-ct=$SYBASE/OCS
instead of
  --with-sybase-ct=$SYBASE
elee at kinwai dot net
15-Apr-2002 09:28
Freetds 5.2 bugs!!

For those who use Freetds 5.2 running under linux connect to sqlserver2000, there is a bugs in selecting NVARCHAR field that data will either duplicated or truncated. To avoid this problem, please use CAST or CONVERT function in sql statement such as:
$query="select CAST(fieldname as nchar(1000)) as fieldname from table"

Feel free to contact us at
[email protected]
or
[email protected]

German Chu & Eagle Lee
rudolf at 1stomni dot com
27-Feb-2002 08:44
PhpSybaseAdmin
basilio_mail at chat dot ru
25-Oct-2001 10:56
For those, who might want to use SyBase client not only under Linux, you may try to use open-source FreeTDS library -

Also there's how-to for FreeTDS and PHP:
borreo at softhome dot net
14-Sep-2001 06:29
If you have a Linux machine with Sybase ASE 11.9.2, Php 4.0.6, Apache and Sybase-ct library, don't upgrade to Sybase ASE 12.5 yet, or Apache will stop working.
Since 12.5 is newer than 4.0.6, I guess this will be fixed soon.
borreo at softhome dot net
14-Sep-2001 06:22
If you use IIS and sybase-ct library, be sure to use PHP 4.0.6 or higher, since older version caused crashes.
rbuico at ntep dot nec dot co dot jp
28-Aug-2001 03:54
maybe it can help.
my database is ASE

this is my script....

<?
$cnn
= sybase_connect("db_server","sa","password");
$result = sybase_query("Select itemno,stockno from your_db..your_table");
$i = 0;
while (
$r = sybase_fetch_array($result)) {
$i++;
$itemno = $r["itemno"];
$stockno = $r["stockno"];
echo
"$i    $stockno  $itemno <br>";
}
?>

note that I did not use the
sybase_select_db("db") function because ASE had a default database.
thx...
mad at dactar dot ch
04-Jul-2001 08:16
The best place to get Sybase for Debian :

borreo at softhome dot net
28-Jun-2001 01:33
It's important to note that sybase_ct connect or pconnect were causing GPF.
If you experienced this problem, just update PHP to 4.0.6.
heumann at s-und-i dot com
13-Oct-2000 08:17
This should make the image/blob subject rather complete:
PHP 3 seems to have a bug with image columns in sybase. Apache gets a segmentation fault when trying to retrieve an image column with more than a certain amount of characters (even when using set textsize).
The work around is to use text columns instead. They have the same capacity, only you need to convert the data to ASCII (e.g. Hex, see examples in earlier contributions, bin2hex). Remember to put the data in quotes, too, when INSERTing.
koos at kzdoos dot xs4all dot nl
09-Oct-2000 06:20
A bit more about blobs:
<P>
If you want to retrieve blobs without them getting truncated, do a 'set textsize value' query first.
chptma at hydra dot esfm dot ipn dot mx
06-Sep-2000 08:13
about sybase-ct library

You can download the file from php.net but the samples in the tar (and php) maybe not compile I have this problem in some systems (but not in others with old librarys and old gcc).

Try freetds from www.freetds.org that is ok!

System wthout trouble
Debian 2.1 gcc (2.7.2.3) libc-2.0.7.so
System With trouble
Debian 2.2 gcc (2.95.2) libc-2.1.3.so
RedHat 6.2 gcc [egcs] (2.91.66) libc-2.1.3.so

Please refer to mssql if you try to connect to MS SQL Server!!!
hoadley at xoom dot com
18-Aug-2000 09:41
I would STRONGLY recommend using the ct library over the db library when compiling sybase support with php4+. I ran into strange http child seg faults when trying to issue multiple sql statements in one php page.  Using ct-library there is no problem.
ilya at vtrails dot com
09-Jul-2000 02:03
Amigos, pay attention: sybase_get_last_message() is gone! Read logs or set track_errors=On and use $php_errormsg instead.
james at lasolas dot com
22-Mar-2000 02:28
If you get a segfault with sybase-ct, add a en_US entry to your  $SYBASE/locales/locales.dat file:
<PRE>
[linux]
   locale = en_US, us_english, iso_1
   ...
</PRE>
ericnewman at aol dot com
06-Mar-2000 09:57
I struggled to get this to work for a week. Here's a tip. Log on to your system using the same login as your web server, probably "nobody". Using this account, make sure you can get isql to work. In my case, I had to change the permissions on the /opt/sybase folder, as well as chmod the /opt/sybase/interfaces file to 644. (It was 600 by default, and did not allow anyone but root to read it.) Once I did this, things started to happen...
tcurdt at dff dot st
01-Mar-2000 09:34
Poor documentation on sybase support!! Here's how I made it work... First get the linux ASE from sybase (maybe the ctlibs provided at php.net will do fine, too) Install the ASE rpm. (some distributions don't have system libs etc in the rpm database so you might get some dependency errors. If your systems fits the requirements install with "ignore dependencies") Recompile php with option --with-sybase-ct=/dirtoyoursybasehome. Then you need to set the env variable for (at least)your apache user by export SYBASE=/dirtoyoursybasehome. Now you need to set up your servers (like DSNs for ODBC). Edit the file $SYBASE/interfaces and add your server entries:

SERVERNAME
  query tcp ether 172.16.1.4 4100
  master tcp ether 172.16.1.4 4100

(change IP/FQHN and port to your setup) Now you can check your config by using
$SYBASE/bin/isql -S SERVERNAME -U DBUSER -P PASSWD
If you get a prompt you have connected to your sybase! Hurray! Now you can try with php
$db=sybase_connect("SERVERNAME","DBUSER","DBPASSWD");
And... Voila!
Xtof at fromages-et-desserts dot com
20-Feb-2000 06:18
To store an image file into Sybase try this :

$data = bin2hex(fread(fopen($image,"r"), filesize($image)));
//don't forget the 0x before the hex data.
if(! sybase_query("INSERT INTO test_image (image) VALUES (0x".$data.")")) die ("Unable to store the image.");

To retrieve it just do a select and use a hex2bin function (this one has been submitted by [email protected] and is the fastest) :

function hex2bin($data) {
     $len = strlen($data);
     return pack("H" . $len, $data);
}

PS : use CT-lib rather than DB-lib (Sybase doesn't work on it anymore!)

<wordwrapsybase_affected_rows>
 Last updated: Tue, 21 Dec 2004
show source | credits | sitemap | contact | advertising | mirror sites 
Copyright © 2001-2005 The PHP Group
All rights reserved.
This unofficial mirror is operated at: /
Last updated: Mon Mar 14 08:13:06 2005 Local time zone must be set--see zic manual page