php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #31990 dblib.c:303: buffer_add_row: Assertion `row_size <= buf->element_size' failed
Submitted: 2005-02-16 02:25 UTC Modified: 2005-04-18 15:24 UTC
From: tim at datad dot com Assigned:
Status: Closed Package: Sybase (dblib) related
PHP Version: 4CVS, 5CVS (2005-02-16) OS: SuSE 9.2 Pro 2.6.8-24.11-default
Private report: No CVE-ID: None
 [2005-02-16 02:25 UTC] tim at datad dot com
Description:
------------
I get the following error when I run any stored procedure.  The script works fine if you use SQL statements, but sp's die.



php: dblib.c:303: buffer_add_row: Assertion `row_size <= buf->element_size' failed.
Aborted

My PHP Configuration:

./configure \
--with-apache2=../httpd-2.0.53 \
--enable-track-vars \
--enable-magic-quotes \
--enable-discard-path \
--enable-force-cgi-redirect \
--enable-shared \
--enable-sigchild \
--enable-sockets=shared \
--enable-mailparse \
--with-module=so \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-mysql \
--with-gnu-ld \
--with-zlib \
--with-sybase \
--with-tdsver=7.0 \
--with-unixODBC \
--with-dbase \
--with-openssl \
--with-gd \
--with-ttf \
--with-curl \
--with-mcrypt


Reproduce code:
---------------
<?php

        $servername = "my-server-here" ;
        $portnumber = "5000" ;
        $username   = "sa" ;
        $password   = "" ;
        $database   = "master" ;

        $db              = sybase_connect("$servername:$portnumber", "$username", "$password");
        sybase_select_db ( "$database" );
        $q               = sybase_query("exec sp_server_info", $db);

      # $q = sybase_query("${database}..sp_help", $db);
      # $q = sybase_query("select * from sysobjects", $db);

        $syb_num_fields  = sybase_num_fields( $q ) ;
        $syb_num_rows    = sybase_num_rows( $q ) ;

        $row_cnt         = 0 ;
        $field_cnt       = 0 ;

        while($row = sybase_fetch_row($q))
                {
                if ( $row_cnt == 0 )
                        {
                        for ( $f=1; $f<=$syb_num_fields;$f++)
                                {
                                $info = sybase_fetch_field($q);
                                print "[$info->name]";
                                if ( $field_cnt == $syb_num_fields )
                                        {
                                        print "\n" ;
                                        $field_cnt = 0 ;
                                        }
                                }
                        print "\n" ;
                        }

                ++$row_cnt ;
                $field_cnt = 0 ;
                while(list($k, $v) = each($row))
                        {
                        ++$field_cnt;
                        $datum = NULL ;
                        $datum = rtrim ( $v ) ;
                        print "[$datum]" ;
                        if ( $field_cnt == $syb_num_fields )
                                {
                                print "\n" ;
                                $field_cnt = 0 ;
                                }
                        }
                }
sybase_close ( $db ) ;

?>

Expected result:
----------------
I expect it to work!

I should see the output of the stored procedure or at least some kind of explanation as to why it's failing.

Actual result:
--------------
the bug.

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2005-02-16 03:18 UTC] sniper@php.net
Please try using this CVS snapshot:

  http://snaps.php.net/php4-STABLE-latest.tar.gz
 
For Windows:
 
  http://snaps.php.net/win32/php4-win32-STABLE-latest.zip

And why don't you use --with-sybase-ct ?? AFAIK, it's better supported than the old sybase-db..

 [2005-02-16 05:16 UTC] tim at datad dot com
OK, so...

I downloaded and installed the latest PHP ( 4.3.11-dev ) and it still exhibits the same behavior.

php: dblib.c:303: buffer_add_row: Assertion `row_size <= buf->element_size' failed.
Aborted


Incidentally, you cannot configure 
--with-sybase
--with-sybase-ct

it has to be one or the other.  When I configured --with-ct I got segfaults, and nothing worked at all.  I could not connect or anything with either through a browser or php-cli.

I used --with-sybase-ct=/opt/sybase/OCS-12_5


So I've configured for --with-sybase=/opt/sybase and now what worked before is working and it is producing the same error as before when I try to use a stored procedure.

My latest configure:

./configure \
--enable-shared \
--with-apache2=../httpd-2.0.53 \
--with-module=so \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-mysql \
--with-gnu-ld \
--with-zlib \
--with-sybase=/opt/sybase \
--with-unixODBC \
--with-dbase \
--with-openssl \
--with-gd \
--with-ttf \
--with-curl \
--with-mcrypt
 [2005-02-16 22:36 UTC] tim at datad dot com
I believe this is a FreeTDS problem. 

I uninstalled FreeTDS, but now I can no longer connect at all.

Instead I get:

PHP Warning:  sybase_select_db(): Sybase:  A link to the server could not be established in /srv/www/sybasedba/sybasedba.run_sp.php on line 17
PHP Warning:  sybase_query(): 0 is not a Sybase link index in /srv/www/sybasedba/sybasedba.run_sp.php on line 21
PHP Warning:  sybase_num_fields(): 0 is not a Sybase result index in /srv/www/sybasedba/sybasedba.run_sp.php on line 23
PHP Warning:  sybase_num_rows(): 0 is not a Sybase result index in /srv/www/sybasedba/sybasedba.run_sp.php on line 24
PHP Warning:  sybase_fetch_row(): 0 is not a Sybase result index in /srv/www/sybasedba/sybasedba.run_sp.php on line 29
PHP Warning:  sybase_close(): 0 is not a Sybase link index in /srv/www/sybasedba/sybasedba.run_sp.php on line 62



What do I do to connect PHP to Sybase if I do not use FreeTDS?
 [2005-04-18 15:17 UTC] sniper@php.net
Eh..how do you expect it to work if you uninstall it??
It's a freetds bug anyway -> bogus.

 [2005-04-18 15:24 UTC] tim at datad dot com
Thanks dude.  I figured this out what TWO MONTHS AGO.

:-)

What I was trying to figure out is if I can live without FreeTDS and simply use Sybases' connection library.  It's too confusing which or what to use, so I went back to FreeTDS for what I **can** do, and wrote a shell wrapper for stored procs that return more than one result set--which is quite a few standard "supplied" stored procs that come with Sybase, like sp_help, etc.


Thanks anyway!
 
PHP Copyright © 2001-2020 The PHP Group
All rights reserved.
Last updated: Fri Feb 28 18:01:26 2020 UTC