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

标签 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.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'];

感谢您的帮助。

最佳答案

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

  1. 您需要定义多个 OUT 或 INOUT 变量来放置您的输出结果。
  2. 您需要在 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/

相关文章:

大表上的 MySQL 存储过程占用服务器磁盘空间

php - crc32应该如何存储在MySQL中?

php/jquery 从 mysql 表自动完成

php - 如何从提供的电子邮件地址创建用户名 - PHP

mysql - MySQL 工作台中的 EER

mysql - Rails 4 - 如何通过 has_many 关联与同一列上的多个条件查询集合?

sql - 等于操作中 "SQL_Latin1_General_CP1_CI_AS"和 "Modern_Spanish_CI_AS"之间的排序规则冲突

c# - 如何将 byte[] 从 C# 作为字符串传递给 SQL Server 存储过程并转换为 varbinary(MAX)

php - FFMPEG 后台任务完成后运行脚本(通过 PHP)

php - 如何在php中读取soap响应xml