如何使用一个存储过程从单独的表中返回mysql列?

时间:2013-06-15 21:08:43

标签: php mysql stored-procedures

如果重新转发,我真诚地道歉,我找不到答案。我是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 个答案:

答案 0 :(得分:0)

你要做的事情的关键是双重的:

  1. 您需要定义多个OUT或INOUT变量以将输出结果放入。
  2. 您需要在PHP端检索那些输出变量。
  3. 对于1,请参阅第一个示例here

    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,您需要在数据库服务器上创建一个会话变量,您可以将结果分配给并查询以获取它们。看看this example in the comments here。它变得相当冗长,所以我不会复制和粘贴,但你应该能够根据自己的需要进行调整。页面主体中还有一些替代方法。