From:             
Operating system: Linux
PHP version:      5.3.2
Package:          MySQL related
Bug Type:         Bug
Bug description:MysqlSTMT could not effectively support dynamic SQL with 
Prepare Statement

Description:
------------
Hi, I found this problem but i could not find any suggestion in google, so
I think that was probable a bug in Mysqli_STMT:

first,I create a dynamic SQL Procedure example:

CREATE UP_Get_PagedSoftware(

                                    IN VI_PageSize INT,

                                    IN VI_PageNow INT,

                                    OUT OV_ROWS INT

                                 )

BEGIN

                                   DECLARE UV_BeginRow INT DEFAULT 0;

                                   DECLARE UV_dynamicSQL VARCHAR(1000);

                                   SET UV_BeginRow = (VI_PageNow-1)*VI_PageSize;

                                   

                                   SELECT COUNT(id) INTO OV_ROWS FROM software;

                                   

                                   SET UV_dynamicSQL = CONCAT_WS(' ','SELECT 
Name,Size,Desp
FROM software LIMIT',UV_BeginRow,',',VI_PageSize);

                                   

                                   SET @dynamicSQL = UV_dynamicSQL;

                                   PREPARE pager_stmt FROM @dynamicSQL;

                                   EXECUTE pager_stmt;

                                   DEALLOCATE PREPARE pager_stmt;

                                 END

I directly called this procedure in Mysql Command Line that was OK,

But I called this procedure in PHP page, the code is below:

$softlist = array();

                if($this->link){

                        $this->link->query("set names 'utf8'");

                        $this->link->query("SET @count");

                        $stmt = $this->link->stmt_init();

                        $stmt = $this->link->prepare('CALL
UP_Get_PagedSoftware(?,?,@count)');

                        if($stmt){

                                
$stmt->bind_param('ii',$this->pagesize,$currentpage);

                                $stmt->execute();

                                $stmt->store_result();

                                if($this->link->more_results()){

                                        $this->link->next_result();

                                        $rs = $this->link->query('SELECT 
@count');

                                        list($count) = 
$rs->fetch_array(MYSQLI_NUM);

                                        $this->pagecount=(int)$count;

                                        $rs->free();

                                }

                                $stmt->bind_result($name,$size,$desp);

                                while($stmt->fetch()){

                                        

                                                                                
$softlist[]=array($name,$size,$desp);

                                }

                                $stmt->free_result();

                                $stmt->close();

                        }

                }

                return $softlist;

just like this, but the recoreds returned look like
this:'ostWEB304KB$最佳化Cache,浏览网页速度快Clever
Terminal655KB非常好的TelNet软件 中文论坛'



it seemed the Mysqli_STMT returned all records according to start and end
index and allocate into one filed 




-- 
Edit bug report at http://bugs.php.net/bug.php?id=52196&edit=1
-- 
Try a snapshot (PHP 5.2):            
http://bugs.php.net/fix.php?id=52196&r=trysnapshot52
Try a snapshot (PHP 5.3):            
http://bugs.php.net/fix.php?id=52196&r=trysnapshot53
Try a snapshot (trunk):              
http://bugs.php.net/fix.php?id=52196&r=trysnapshottrunk
Fixed in SVN:                        
http://bugs.php.net/fix.php?id=52196&r=fixed
Fixed in SVN and need be documented: 
http://bugs.php.net/fix.php?id=52196&r=needdocs
Fixed in release:                    
http://bugs.php.net/fix.php?id=52196&r=alreadyfixed
Need backtrace:                      
http://bugs.php.net/fix.php?id=52196&r=needtrace
Need Reproduce Script:               
http://bugs.php.net/fix.php?id=52196&r=needscript
Try newer version:                   
http://bugs.php.net/fix.php?id=52196&r=oldversion
Not developer issue:                 
http://bugs.php.net/fix.php?id=52196&r=support
Expected behavior:                   
http://bugs.php.net/fix.php?id=52196&r=notwrong
Not enough info:                     
http://bugs.php.net/fix.php?id=52196&r=notenoughinfo
Submitted twice:                     
http://bugs.php.net/fix.php?id=52196&r=submittedtwice
register_globals:                    
http://bugs.php.net/fix.php?id=52196&r=globals
PHP 4 support discontinued:          http://bugs.php.net/fix.php?id=52196&r=php4
Daylight Savings:                    http://bugs.php.net/fix.php?id=52196&r=dst
IIS Stability:                       
http://bugs.php.net/fix.php?id=52196&r=isapi
Install GNU Sed:                     
http://bugs.php.net/fix.php?id=52196&r=gnused
Floating point limitations:          
http://bugs.php.net/fix.php?id=52196&r=float
No Zend Extensions:                  
http://bugs.php.net/fix.php?id=52196&r=nozend
MySQL Configuration Error:           
http://bugs.php.net/fix.php?id=52196&r=mysqlcfg

Reply via email to