ホームページ >バックエンド開発 >PHPチュートリアル >MySQL ストアド プロシージャは正常に実行されましたが、PHP は値を取得できません。
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; の結果を読み取ることができません (最後の結果セットにあります)
ストアド プロシージャは 2 つの結果セットを返します (条件 empid>0 が true の場合、結果セットは 3 つになります)
しかし、mysql 関数グループには、結果セットポインターなので、select @tmpjf into bb; の結果は読み取れません (最後の結果セットにあります)
操作するには mysqli 関数グループまたは PDO クラスを使用する必要があります
これが php 5.5 の理由の 1 つですmysql 関数グループを放棄しました
わかりました。 3Q. つまり、ストアド関数は 1 つの結果のみを返すのが最適です
データベース操作の拡張機能を変更せずに (変更した場合、プログラムの変更は小さくありません)、mysql_next_result 関数を実行してみることができます。クエリ