首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PHP返回mysql存储过程的输出参数

使用PHP返回mysql存储过程的输出参数
EN

Stack Overflow用户
提问于 2013-01-28 05:37:28
回答 1查看 17.8K关注 0票数 2

我计划使用PHP和MySQL开发一个内容管理系统,它利用MySQL存储过程对我的MySQL数据库执行预准备语句查询。我用PHP开发已经有很长一段时间了(回到过程化时代),所以我将尝试使用PHP的新OOP结构来实现这个系统。在此之前,我需要解决一个简单的问题:将MySQL存储过程的输出参数返回到一个简单的php页面。这只是一个测试,这样我就可以在开发我的第一个php类之前获得正确的语法,所以这里发布的初始代码是过程性的。

首先,这是我的存储过程:

代码语言:javascript
复制
    DELIMITER $$
    DROP PROCEDURE IF EXISTS `text_development`.`get_user`$$
    CREATE PROCEDURE  `text_development`.`get_user`
    (
    IN userId INT,
    OUT user_name VARCHAR(100)
    )
    BEGIN
    SELECT username
    INTO user_name
    FROM user
    WHERE user_id = userId;
    END $$
    DELIMITER ;

然后是我的两个php文件:

代码语言:javascript
复制
    <?php
    //db_config.php
    $mysqli_host = "localhost";
    $mysqli_user = "root"; //I'm not stupid enough to use this in development
    $mysqli_pass = "root"; //before anyone comments about the root usage
    $mysqli_db = "text_development";
    ?>


    <?php
    //index.php
    require('incl/db_config.php');
    $dbConnection = new Mysqli($mysqli_host, $mysqli_user, $mysqli_pass, $mysqli_db) or die(mysql_error());
    print '<h1>Stored Procedure Retrieval Test</h1>';
    $id = 1;
    $return = '';
    $result = $dbConnection->query( 'CALL get_user($id,$return)');
    print $result;
    ?>

我的问题出现在index.php页面上。它实际上似乎不会返回任何东西。在PHPMyAdmin中执行存储过程时,当我传入用户id 1时会返回用户名测试,但是在php中调用函数时不会向屏幕返回任何内容。我也尝试过打印$return,但这只返回一个空字符串(正如我在上面的代码中定义的那样)。我试过使用这个在线教程,但那里的解决方案似乎不起作用:

http://www.joeyrivera.com/2009/using-mysql-stored-procedures-with-php-mysqlmysqlipdo/

有人知道我在这里做错了什么吗?为什么这个存储过程的返回参数没有显示在屏幕上?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-28 05:44:50

首先,您参考了关于PDO的教程,但您使用的是Mysqli。

第二步:转换:

代码语言:javascript
复制
$result = $dbConnection->query( 'CALL get_user($id,$return)');

to (请注意双引号和@return``):

代码语言:javascript
复制
$result = $dbConnection->query( "CALL get_user({$id},@return)");

然后,稍后,执行以下操作:

代码语言:javascript
复制
$result = $dbConnection->query( 'SELECT @return');

如果SP是SELECT,那么您可以在自己编写的情况下执行此操作。

原因是,SP不会向PHP返回任何内容,它会将值返回到MySQL变量(@return)中(scop在MySQL中),因此您需要在一个单独的调用中查询此变量。如果它是对一个简单的select SP的调用,那么它将像任何其他select语句一样返回值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14552601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档