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
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: tim at datad dot com
New email:
PHP Version: OS:

 

 [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

Pull Requests

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-2024 The PHP Group
All rights reserved.
Last updated: Thu Sep 19 00:01:27 2024 UTC