如有转载,我深表歉意,我找不到答案。我是 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 中处理它,我将如何处理它?</p>
$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'];
感谢您的帮助。
最佳答案
您尝试做的事情的关键是双重的:
- 您需要定义多个 OUT 或 INOUT 变量来放置您的输出结果。
- 您需要在 PHP 端检索这些输出变量。
对于 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 结果分配给变量。
对于 2,您需要在数据库服务器上创建一个 session 变量,您可以将结果分配给它并查询以取回它们。看看this example in the comments here .它变得非常冗长,所以我不会复制和粘贴,但你应该能够根据你的需要调整它。页面主体中也有一些替代方法。
关于php - 如何使用一个存储过程从单独的表中返回 mysql 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17127896/