ホームページ >バックエンド開発 >PHPチュートリアル >MySQL ストアド プロシージャは正常に実行されましたが、PHP は値を取得できません。

MySQL ストアド プロシージャは正常に実行されましたが、PHP は値を取得できません。

WBOY
WBOYオリジナル
2016-06-23 13:43:52922ブラウズ

begin
destroy tmp varchar(100);
destroy tmpjf int(10); if empid>0 then
#select REPLACE(empfixed,'.',',') where id=empid into @tmp; select substring(REPLACE(empfixed,'.',',' ) ,2,char_length(empfixed) -2) into @tmp from kyydemploy where id=empid ;

end if; set @sel='select sum(dejifen) ) kyydeinter から @tmpjf に id in (';
set @selt=')';
@conds から stmt を準備する
stmt; deallocate prepare stmt;
select @tmpjf into bb;
end

ここで、bb は返された単語の値 int 型です。
cmd または navicat を使用して実行できます。ただし、phpでは値を取得できません。また、単純なストアド プロシージャ select 888 into bb も使用しましたが、これは php で取得できます。何が問題なのか教えていただけますか?




ディスカッションへの返信 (解決策)

ストアド プロシージャは 2 つの結果セットを返します (条件 empid>0 が true の場合、3 つの結果セットになります) ただし、mysql 関数グループには関数がありません結果セットポインタを移動するため、select @tmpjf into bb; の結果を読み取ることができません (最後の結果セットにあります)
操作するには mysqli 関数グループまたは PDO クラスを使用する必要があります

これが理由の 1 つですなぜ php 5.5 は mysql 関数グループを放棄したのか



ストアド プロシージャは 2 つの結果セットを返します (条件 empid>0 が true の場合、結果セットは 3 つになります)
しかし、mysql 関数グループには、結果セットポインターなので、select @tmpjf into bb; の結果は読み取れません (最後の結果セットにあります)
操作するには mysqli 関数グループまたは PDO クラスを使用する必要があります

これが php 5.5 の理由の 1 つですmysql 関数グループを放棄しました



わかりました。 3Q. つまり、ストアド関数は 1 つの結果のみを返すのが最適です

データベース操作の拡張機能を変更せずに (変更した場合、プログラムの変更は小さくありません)、mysql_next_result 関数を実行してみることができます。クエリ


RRee
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。