ホームページ >バックエンド開発 >PHPチュートリアル >mysqlクエリのストアドプロシージャで2つのクエリ結果が表示される PHPで2つの結果を表示する方法。
mysql クエリのストアド プロシージャで 2 つのクエリ結果が表示される PHP で 2 つの結果が表示される
mysql クエリのストアド プロシージャで 2 つのクエリ結果が表示される PHP で表示される方法
---- ------------------------
mysql ストアド プロシージャ:
------ ----- ----------
begin
strSQL varchar(3000) を宣言;
beginnum int を宣言;
strCount_s varchar(2000) );
/*ページ番号を判断し、空、0、または null の場合、デフォルトは最初のページです*/
if(PageIndex is null or PageIndex = '' or PageIndex = 0)
then
set PageIndex = 1;
end if;
/*各ページに表示される番号を判断し、空か 0 または null の場合、デフォルトは最初の番号です*/
if ( SplitCount=0 または SplitCount=' ' または SplitCount が null)
then
set SplitCount = 1;
end if
/*条件に従ってすべてのデータセットをクエリ*/
set @ beginnum = (PageIndex -1) * SplitCount;
set @strSQL = concat('select ', numtype, ' from ', tablename, ' where ', wheretype,' ' , OrderBy, ' limit ',@beginnum, ' ,', SplitCount);
PREPARE stmt from @strSQL;
run stmt;
DEALLOCATE PREPARE stmt;
/*条件に基づいてデータの総数をクエリします*/
set @strCount_s=concat('select count (1) as countnum from ', tablename,' where ', wheretype);
prepare select_rowscount from @strCount_s;
use select_rowscount;
DEALLOCATE PREPARE select_rowscount;
end
MYSQL 結果 1: DEALLOCATE PREPARE stmt; すべてのクエリ データを出力
MYSQL 結果 2: DEALLOCATE PREPARE select_rowscount; クエリの総数を出力します
------ --------- ------------
PHP ストアド プロシージャ クラス
-- -------- -----------------------------
/**
* ストアド プロシージャの操作
*
* @param $ProduceAndParams ストアド プロシージャ名とパラメータ
* 形式は ProduceName(para1, para2....),
* パラメータが文字 一重引用符を追加してください
* @return $resultnum 成功した操作によって影響を受ける行数を返します
* @throws 例外ストアド プロシージャ例外
*/
パブリック静的関数 RunProduce($ProduceAndParams )
{
global $_config;
if (!mysql_query("SET NAMES ".$_config['coding'], self::$_wdbConn)) {
throw new Exception("SET 文字セット ".$_config['coding']." 失敗しました: ".mysql_error());
}
if(!mysql_query('call '.$ProduceAndParams.' ;', self::$_wdbConn )) {
throw new Exception("ストアド プロシージャの呼び出しに失敗しました:".mysql_error());
}
$resultNum = mysql_affected_rows(self::$_wdbConn) ;
return $resultNum;
}
-------------------------------- --
どのように PHP で作成すると、ストアド プロシージャ クエリの 2 つの結果を表示できます
-----解決策--- -------- ----------
私が収集した情報を参照できます:
PHP は MySQL ストアド プロシージャ メソッド コレクションを呼び出します タイプ 1: 入力および出力型パラメーターを使用してメソッドを呼び出す プレーンプリントを表示しますか? $returnValue = ''; 試す { mysql_query ( "set @Return" ); $spname = 'P__Test_GetInfo1'; mysql_query ( "call $spname(@Return, '{$userId}', '{$pwd}')" ) または die ( "[$spname]Query failed:" . mysql_error () ); $result_return = mysql_query ( "select @Return" ); $row_return = mysql_fetch_row ( $result_return ); $returnValue = $row_return [0]; } catch (例外 $e) { $e をエコーします。 } echo $returnValue; // ストアド プロシージャから出力される出力変数 タイプ 2: 複数の出力型と複数の入力型パラメーターを使用してメソッドを呼び出す プレーンプリントを表示しますか? $userId = 0; 試す{ mysql_query("set @Message"); mysql_query("@Id を設定"); mysql_query("call P__Test_Login(@Message, @Id, '{$userId}', '{$pwd}')", $conn) または die("Query failed:".mysql_error()); $result_mess = mysql_query("select @Message"); $result_uid = mysql_query("select @Id"); $row_mess = mysql_fetch_row($result_mess); $row_uid = mysql_fetch_row($result_uid); $Proc_Error = $row_mess[0]; $uId = $row_uid[0]; } catch(例外 $e) { $e をエコーします。 } echo 'proc return message:'$Proc_Error.'<br/>' //ストアドプロシージャから出力された変数を出力します。 echo 'ユーザー ID:'.$uId; // ユーザー ID を取得します。 タイプ 3: 結果セットを返すメソッドの呼び出し プレーンプリントを表示しますか? 試す { $spname = 'P__Test_GetData'; $query = mysql_query ( "call $spname()", $conn ) または die ( "[$spname]Query failed:".mysql_error() ); while ( $row = mysql_fetch_array ( $query ) ) { echo $row ['ProvinceID'].'::'.$row ['ProvinceName'] // 出力データセット } } catch (例外 $e) { $e をエコーします。 } タイプ 4: 複数の結果セットを返すメソッドの呼び出し (現在、これは mysqli~~~~~ を通じてのみ実現できます) プレーンプリントを表示しますか? //PHP $rows = 配列(); $db = 新しい mysqli($server,$user,$psd,$dbname); if (mysqli_connect_errno()){ $this->message('MySQL サーバーに接続できません'); } $db->query("SET NAMES UTF8"); $db->query("SET @Message"); if($db->real_query("call P__Test_GetData2(@Message)")){ する{ if($result = $db->store_result()){ while ($row = $result->fetch_assoc()){ array_push($rows, $row); } $result->close(); } }while($db->next_result()); } $db->close(); print_r($rows); <div class="clear"></div>