繁体   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