|
|
 |
CXXV. Sybase Functions
To enable Sybase-DB support configure PHP
--with-sybase[=DIR]. DIR is the
Sybase home directory, defaults to /home/sybase.
To enable Sybase-CT support configure PHP
--with-sybase-ct[=DIR]. DIR is the
Sybase home directory, defaults to /home/sybase.
The behaviour of these functions is affected by settings in php.ini.
Table 1. Sybase configuration options | Name | Default | Changeable | Changelog |
|---|
| 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 | "0" | PHP_INI_ALL | |
Here's a short explanation of
the configuration directives.
- sybase.allow_persistent
boolean
Whether to allow persistent Sybase connections.
- sybase.max_persistent
integer
The maximum number of persistent Sybase connections per
process. -1 means no limit.
- sybase.max_links
integer
The maximum number of Sybase connections per process,
including persistent connections. -1 means no limit.
- sybase.min_error_severity
integer
Minimum error severity to display.
- sybase.min_message_severity
integer
Minimum message severity to display.
- sybase.compatability_mode
boolean
Compatibility mode with old versions of PHP 3.0. If on, this will cause
PHP to automatically assign types to results according to their Sybase
type, instead of treating them all as strings. This compatibility mode
will probably not stay around forever, so try applying whatever
necessary changes to your code, and turn it off.
- magic_quotes_sybase
boolean
If magic_quotes_sybase is on, a
single-quote is escaped with a single-quote instead of a
backslash if magic_quotes_gpc
or magic_quotes_runtime
are enabled.
Note:
Note that when magic_quotes_sybase
is ON it completely overrides magic_quotes_gpc
. In this case even when
magic_quotes_gpc is enabled
neither double quotes, backslashes or NUL's
will be escaped.
Table 2. Sybase-CT configuration options | Name | Default | Changeable | Changelog |
|---|
| sybct.allow_persistent | "1" | PHP_INI_SYSTEM | Available since PHP 4.0.4. | | sybct.max_persistent | "-1" | PHP_INI_SYSTEM | Available since PHP 4.0.4. | | sybct.max_links | "-1" | PHP_INI_SYSTEM | Available since PHP 4.0.4. | | sybct.min_server_severity | "10" | PHP_INI_ALL | Available since PHP 4.0.4. | | sybct.min_client_severity | "10" | PHP_INI_ALL | Available since PHP 4.0.4. | | sybct.hostname | NULL | PHP_INI_ALL | Available since PHP 4.0.4. | | sybct.deadlock_retry_count | "0" | PHP_INI_ALL | Available since PHP 4.3.0. |
Here's a short explanation of
the configuration directives.
- sybct.allow_persistent
boolean
Whether to allow persistent Sybase-CT connections.
The default is on.
- sybct.max_persistent
integer
The maximum number of persistent Sybase-CT connections per
process. The default is -1 meaning unlimited.
- sybct.max_links
integer
The maximum number of Sybase-CT connections per process,
including persistent connections. The default is -1 meaning
unlimited.
- sybct.min_server_severity
integer
Server messages with severity greater than or equal to
sybct.min_server_severity will be reported as warnings. This
value can also be set from a script by calling
sybase_min_server_severity(). The default
is 10 which reports errors of information severity or greater.
- sybct.min_client_severity
integer
Client library messages with severity greater than or equal to
sybct.min_client_severity will be reported as warnings. This
value can also be set from a script by calling
sybase_min_client_severity(). The default
is 10 which effectively disables reporting.
- sybct.login_timeout
integer
The maximum time in seconds to wait for a connection attempt
to succeed before returning failure. Note that if
max_execution_time has been exceeded when a connection attempt
times out, your script will be terminated before it can take
action on failure. The default is one minute.
- sybct.timeout
integer
The maximum time in seconds to wait for a select_db or query
operation to succeed before returning failure. Note that if
max_execution_time has been exceeded when an operation times
out, your script will be terminated before it can take action
on failure. The default is no limit.
- sybct.hostname
string
The name of the host you claim to be connecting from, for
display by sp_who. The default is none.
- sybct.deadlock_retry_count
int
Allows you to define how often deadlocks are to be retried. The default
is -1, or "forever".
For further details and definitions of the
PHP_INI_* constants, see the Appendix H.
This extension has no constants defined.
User Contributed Notes
Sybase Functions
punkarruso at despammed dot com
14-Dec-2004 07: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 10: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 04:07
info(at)sovall(dot)cz
04-Aug-2004 06: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 12: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 07: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 08: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 04: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 05:25
ddc at portalframework.com
14-May-2002 01: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 04: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
aikok@netfront.net
or
elee@kinwai.net
German Chu & Eagle Lee
rudolf at 1stomni dot com
27-Feb-2002 02:44
basilio_mail at chat dot ru
25-Oct-2001 05:56
borreo at softhome dot net
14-Sep-2001 01: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 01: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
27-Aug-2001 10: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 03:16
borreo at softhome dot net
28-Jun-2001 08: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 03: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 01: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 03: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 04: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 09: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
21-Mar-2000 08: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 03: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 03: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 12: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 carl@five-ten-sg.com 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!)
| |