gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 03:06:22 26 4
gpt4 key购买 nike

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

首先是我的存储过程:

    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文件:

    <?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/

有谁知道我在这里做错了什么以及为什么这个存储过程的返回参数没有被打印到屏幕上?

最佳答案

首先,你引用了PDO的教程,但是你使用的是Mysqli。

第二:转换:

$result = $dbConnection->query( 'CALL get_user($id,$return)');

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

$result = $dbConnection->query( "CALL get_user({$id},@return)");

然后,稍后,做:

$result = $dbConnection->query( 'SELECT @return');

如果 SP 是一个 SELECT,那么你就按照你写的去做。

原因是,SP 没有返回给 PHP 任何东西,它返回值到 MySQL 变量 (@return)(scop 在 MySQL 中),所以你需要在一个单独调用。如果它是对简单选择 SP 的调用,那么它会像任何其他选择语句一样返回值。

关于php - 使用PHP返回mysql存储过程的输出参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14552601/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com