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'];
感谢您的帮助。
答案 0 :(得分:0)
你要做的事情的关键是双重的:
对于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。它变得相当冗长,所以我不会复制和粘贴,但你应该能够根据自己的需要进行调整。页面主体中还有一些替代方法。