簡體   English   中英

如何使用一個存儲過程從單獨的表返回mysql列?

[英]How can I return mysql columns from separate tables with one stored procedure?

如果轉貼我真的很抱歉,我找不到答案。 我是MySql和PHP的新手,我正在嘗試編寫一個存儲過程,該過程從兩個單獨的表返回內容。 調用本質上是這樣的:

CREATE DEFINER=`root`@`localhost` PROCEDURE `grabPage`(t_user VARCHAR(32), 
                        t_page VARCHAR(128))
BEGIN
    SELECT formC FROM menuTable WHERE user=t_user;
    SELECT formC FROM siteTable WHERE user=t_user AND page=t_page ORDER BY contentID;
END

這是看這個錯誤的方法嗎? 最佳做法是什么? 我要使用一個存儲過程執行此操作的原因是,我只需要對php中的數據庫進行一次調用即可。 該代碼看起來像這樣,如果我應該在php中處理它,我將如何去做呢?

$con = mysqli_connect("localhost", "dbusername", "dbpassword", "database");
$query = "CALL grabPage('username', 'pagename')";
if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($con, $query);
if (!$result) {
    printf("Error: %s\n", mysqli_error($con));
    exit();
}
$row = array();
while ($row[] = mysqli_fetch_array($result));
mysqli_close($con);
foreach ($row as $htmlOut)
    echo $htmlOut['formattedContent'];

謝謝你的幫助。

您要執行的操作的關鍵是雙重的:

  1. 您需要定義多個OUT或INOUT變量,以將輸出結果放入其中。
  2. 您需要在PHP端檢索這些輸出var。

對於1,請參見此處的第一個示例:

CREATE PROCEDURE p (OUT ver_param VARCHAR(25), INOUT incr_param INT)
BEGIN
  # Set value of OUT parameter
  SELECT VERSION() INTO ver_param;
  # Increment value of INOUT parameter
  SET incr_param = incr_param + 1;
END;

您會注意到使用OUT和/或INOUT指示輸出,並使用INTO將SELECT結果分配給變量。

對於2,您需要在數據庫服務器上創建一個會話變量,您可以將其分配給結果並查詢以將其取回。 在此處的注釋中查看此示例 它非常羅word,所以我不會復制和粘貼,但是您應該能夠適應您的需求。 頁面主體中還有一些替代方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM