|
|
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.hostname | NULL | PHP_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()を参照して下さい。
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
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!)
| |