Verilen bağlamda bir sonuç kümesi döndüremez

5 Cevap php

Ben bir sonuç kümesi geri gönderir mysql saklamak yordamını çağırmak çalıştığınızda hiç, bu "verilen bağlamda bir sonuç kümesi iade edemez" bana söyleyerek tutar.

.... Ben google ettik ve bazı bazı size mysqli sürücüsünü değiştirmeniz gerektiğini söyledi ve, mysql hata olduğunu söyledi

Durum:

Zend 1.9 RC 1 Mysqli adaptörünü kullanarak, mysqli sürücü Client API library version 5.0.51a, PHP Version 5.2.4-2ubuntu5.6 kullanma.

Ne yapmalıyım!?

5 Cevap

Not sure this is the solution to your problem, but what about trying with a more recent version of PHP ?
PHP 5.2.4 is definitly quite old -- so, if it's a bug in PHP's mysqli driver, it might have been corrected since...

Actually, after a quick search, it seems a problem like the one you are witnessing has been introduced between PHP 5.2.3 and PHP 5.2.4 (and was still here in PHP 5.2.5).
See bug #42548 : PROCEDURE xxx can't return a result set in the given context (works in 5.2.3!!)

Are you able to test with something like PHP 5.2.9 or 5.2.10 ?
I know these are not provided by Ubuntu, even in the last Ubuntu stable version :-( You might have to compile from sources :-(


Yet another idea would be to try mith PDO_MySql adapter : maybe it would work with that one ?
It might be possible to change Adapter without causing too much trouble / without taking hours to test ?


Zend Framework 1.9 ile çalışan olarak, burada ilginizi çekebilecek başka bir yazı, ve test etmek daha kolay olabilir: stored procedure error after upgrade to 1.8

Bu Zend Framework 1.7 için geri gitmek olacağını denemek için kolay bir çözüm; sadece test etmek için, sizin için mümkün olurdu?


Anyway... Good luck !
And, if you find the solution, don't forget to indicate what the problem was, and how you solved it ;-)

Cevabı php yükseltmek için, ben sadece 5.3.0 benimkini yükseltilmiş ettik ve bu eserleri Candy seviyor!

Ben bir sözleşme üzerinde son zamanlarda bu sorun vardı. İstemci, Windows'un ve php 5.2.6 bir kod temeli kullanıyordum ve benim kurulum linux ve php 5.3.1 oldu ne olursa olsun bu yüzden sonunda onlar bana, Windows'un vista makineyi verdi ve biz php 5.2 yüklü biz onlar işbirliği olmaz vermedi .6 ve kapalı gittik. Versiyon eşleşen sayıları: Ahlaki hikayenin. Garip cus ben başka bir işte daha önce hiç bu yoktu. Ama hey, sen her şeyi bilemez. Çok kesinlikle bir MySQL sorunu, sadece PHP.

Bir de PHP 5.2.10 ile mükemmel çalışır.

Bir önceki sürüm, başarıyla sorunlu bir yordamı çağırmak ve doğru sonuç almak için mysqli :: multi_query kullandım.

Bu soru eski olduğunu biliyorum, ama yine de 5.2.4 ile çalışan ve bu hatayı alıyorum olanlar için, bu soruna yeni bir mysql PDO nesnesi oluşturmayı düşünebilirsiniz.

Ben hala geliştirmek WordPress eklentileri için geriye dönük uyumluluğu sağlamak için elimden dev sunucuda 5.2.4 kullanabilirsiniz.

Aşağıda başarıyla (vermez yeni bir sürümünü çalıştığı normalde bana hatayı verecek olan, (benim dev sunucu üzerinde çalışan), ve benim üretim hem de sunucu 5.2.4 prosedürleri aramak için kullandığınız usul çağrıları etrafında sarıcı Hata).

Onun WordPress spesifik, ama düz php kullanarak değiştirmek zor olmaz.

/*
* Need to cache connection so we don't keep creating connections till we hit max.
*/

private $_dbhCache=null; 

/**
     * mySQL Call Proc
     *
     * Provides a wrapper around calling a mySQL stored procedure to ensure against a 5.2.4 bug that 
     * causes procedure calls to fail.
     * Error:'can't return a result set in the given context'
     * 
     * references:
     * http://stackoverflow.com/questions/1200193/cant-return-a-result-set-in-the-given-context
     * http://php.net/pdo_mysql#69592  //i got empty result set but pointed me in the right direction
     * http://php.net/pdo_mysql#80306 //this worked, but returned 0-indexed and assoc, i edited it so it only returns assoc mimicking $wpdb->get_results(
     * http://www.php.net/manual/en/pdo.connections.php
     * http://www.php.net/manual/en/pdostatement.fetch.php explains about FETCH_ASSOC
     * 
     * @param string $proc The mySQL stored procedure string, including paramaters, but without the call statement. e.g.: "my_procedure_name('my_paramater')"; 
     * @return string The results of the procedure call
     */
    public function mySQLCallProc( $proc ) {
        global $wpdb;
        $query = "call $proc";

        try {

            /*
             * Attempt to call the procedure normally.
             * 
             */

            $query_result = $wpdb->get_results( $query, ARRAY_A );

            /*
             * Check for a database error
             * and throw an exception if one is found.
             * We can then attempt it again using a workaround.
             */

          if ( $wpdb->last_error !== '' ) { 



                throw new Exception( 'Database Error While Calling Procedure' );
}

        } catch ( Exception $e ) {

            try {

                /*
                 * Create a PDO Object for the connection
                 */
  if ( is_null($this->_dbhCache)) {
                    $dbh = new PDO( 'mysql:host=' . DB_HOST . ';port=' . DB_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASSWORD, array( PDO::ATTR_PERSISTENT => true ) );
 $this->_dbhCache=$dbh ;            
}else{
     $dbh = $this->_dbhCache;
}
                /*
                 * Prepare and call the procedure.
                 */
                $stmt = $dbh->prepare( "call $proc" );

                $stmt->execute();

                /*
                 *  fetch all rows into an associative array.
                 */

                $query_result = $stmt->fetchAll( PDO::FETCH_ASSOC ); //FETCH_ASSOC gets results as an assoc array. without it, you'll receive both assoc and 0-indexed array





    } catch ( PDOException $e ) {

                    print "Error!: " . $e->getMessage() . "<br/>";
    die();

    }


    }

        return ($query_result);


    }