1

如果重新发布,我真诚地道歉,我找不到答案。我是 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.ini 中调用一次数据库。该代码看起来像这样,如果我应该在 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'];

谢谢你的帮助。

4

1 回答 1

0

您尝试做的事情的关键是双重的:

  1. 您需要定义多个 OUT 或 INOUT 变量来放置您的输出结果。
  2. 您需要在 PHP 端检索这些输出变量。

对于 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 结果分配给 var(s)。

对于 2,您需要在数据库服务器上创建一个会话变量,您可以将结果分配给并查询以取回它们。在此处的评论中查看此示例。它变得很罗嗦,所以我不会复制和粘贴,但你应该能够根据你的需要调整它。页面主体中还有一些替代方法。

于 2013-06-15T21:57:33.743 回答