質問

mysqlで結果セットを返すストアプロシージャを呼び出そうとすると、「指定されたコンテキストでは結果セットを返すことができません」と言われ続けます。

グーグルで調べたところ、mysqlのバグだと言う人もいれば、mysqliドライバを変更する必要があると言う人もいました....

状況:

mysqliドライバークライアントAPIライブラリバージョン5.0.51a、PHPバージョン5.2.4-2ubuntu5.6の使用、Zend 1.9 RC 1 Mysqliアダプターの使用。

どうすればいいですか?

役に立ちましたか?

解決

これがあなたの問題の解決策であるかどうかはわかりませんが、最新バージョンのPHPを試してみてはどうでしょうか?
PHP 5.2.4は非常に古いため、PHPのmysqliドライバーのバグである場合は、修正されている可能性があります...

実際、クイック検索の後、PHP 5.2.3とPHP 5.2.4の間で目撃しているような問題が発生しているようです(PHP 5.2.5でも存在していました)。
バグ#42548を参照:PROCEDURE xxxが指定された結果セットを返せないコンテキスト(5.2.3で動作!!!!)

PHP 5.2.9または5.2.10のようなものでテストできますか?
これらはUbuntuによって提供されていないことはわかっています。Ubuntuの最新の安定版でも:-(ソースからコンパイルする必要があるかもしれません:-(


さらに別のアイデアは、mith PDO_MySqlアダプターを試すことです:多分それはそれで動作するでしょうか?
トラブルをあまり引き起こさずに、またはテストに時間をかけることなく、アダプターを変更できる可能性がありますか?


Zend Framework 1.9を使用しているときに、興味があり、テストしやすい別の投稿を以下に示します。 1.8へのアップグレード後のストアドプロシージャエラー

これを試す簡単な解決策は、Zend Framework 1.7に戻ることです。あなたはテストするだけで可能ですか?


とにかく...がんばって!
そして、解決策を見つけたら、問題の内容と解決方法を示すことを忘れないでください;-)

他のヒント

答えはあなたのphpをアップグレードすることです、私はちょうど私のものを5.3.0にアップグレードしました、そしてそれはキャンディのような作品です!

最近、契約でこの問題が発生しました。クライアントはwindozeとphp 5.2.6でコードベースを使用しており、私のインストールはlinuxとphp 5.3.1でしたが、何もしなかったので協力しませんでした。 .6そしてオフに行きました。物語の教訓:バージョンの一致数。他の仕事でこれまで経験したことのない奇妙な話。しかし、ちょっと、すべてを知ることはできません。間違いなくMySqlの問題ではなく、PHPだけです。

PHP 5.2.10でも完全に動作します。

以前のバージョンでは、mysqli :: multi_queryを使用して問題のあるプロシージャを呼び出し、正しい結果を取得しました。

この質問は古くから知っていますが、まだ5.2.4で作業してこのエラーが発生する場合は、この問題を回避するために新しいmysql PDOオブジェクトを作成することを検討してください。

開発中のWordPressプラグインの下位互換性を確保するために、開発サーバーで5.2.4を使用しています。

Belowは、通常エラーが発生する5.2.4(開発サーバーで実行)と、実稼働サーバー(実行しない新しいバージョンを実行する)の両方でプロシージャを正常に呼び出すために使用する手続き呼び出しのラッパーです。エラーは発生しません)。

WordPress固有ですが、ストレートphpを使用して変更することは難しくありません。

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

private 

この質問は古くから知っていますが、まだ5.2.4で作業してこのエラーが発生する場合は、この問題を回避するために新しいmysql PDOオブジェクトを作成することを検討してください。

開発中のWordPressプラグインの下位互換性を確保するために、開発サーバーで5.2.4を使用しています。

Belowは、通常エラーが発生する5.2.4(開発サーバーで実行)と、実稼働サーバー(実行しない新しいバージョンを実行する)の両方でプロシージャを正常に呼び出すために使用する手続き呼び出しのラッパーです。エラーは発生しません)。

WordPress固有ですが、ストレートphpを使用して変更することは難しくありません。

<*>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); }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top