gpt4 book ai didi

php - 用php7.0编写动态调用mysql存储过程的函数

转载 作者:行者123 更新时间:2023-11-29 03:18:45 25 4
gpt4 key购买 nike

只需几句话就可以解释我想做什么。

我想用一个能够调用存储过程的函数来扩展我的库。我在这里找到了制作它的步骤,但我很难让它变得通用

为了实现这一点,我读到我必须在 mysqli_stmt_bind_param 上使用 call_user_func_array,因为我只在执行时知道参数 IN 的数量、类型和 OUT 的数量

这里是我所做的一些细节:

  • 创建到数据库的连接
  • 设置字符集
  • 构建调用字符串,例如 CALL (?,?,?,@outParam1,@outParam2)
  • 准备调用字符串
  • 构建一个参数数组以与调用 mysqli_stmt_bind_param 的 call_user_func_array 一起使用 <= 这给我带来了麻烦
  • 调用mysql_stmt_excute
  • 最后,进行选择以获取参数。

这里是代码的主要部分:

function executeProc($sProcName, $sInParamTypes, $aInParam, $iNumberParameterOut=0)
{
$oConnection = @mysqli_connect(DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DBNAME);

mysqli_set_charset($oConnection, "utf8");

/* code to build the $sCallStr */

$oMysqlCall = mysqli_prepare($oConnection, $sCallStr);

array_unshift($aFunctionParam, $oMysqlCall, $sInParamTypes);

$aFunctionParam = array_merge($aFunctionParam, $aInParam);

call_user_func_array("mysqli_stmt_bind_param", $aFunctionParam);

mysqli_stmt_execute($oMysqlCall);
}

call_user_func_array 的返回值为 NULL。我尝试手动调用该函数:

 mysqli_stmt_bind_param($aFunctionParam[0], $aFunctionParam[1], $aFunctionParam[2], $aFunctionParam[3], $aFunctionParam[4], $aFunctionParam[5], $aFunctionParam[6], $aFunctionParam[7]);

而且它有效。我在数据库中看到了结果,函数的返回值为 TRUE。有人可以帮忙吗?还有另一种传递参数数组的方法吗? (比如引用?)

非常感谢您的帮助

最佳答案

你可以使用 "Argument unpacking"使用 ... :

mysqli_stmt_bind_param($oMysqlCall, $sInParamTypes, ...$aInParam);

这将适用于通过引用传递的变量,并且无需使用 array_unshift()array_merge() 来构建您的参数。


示例:

function foo(&$a, &$b, &$c) { var_dump($a,$b,$c); }

这会起作用:

$arr = [1,2,3];
foo(...$arr); // Works

但这会产生一个警告:

$arr = [1,2,3];
call_user_func_array('foo', $arr);
// Warning: Parameter 1 to foo() expected to be a reference, value given

关于php - 用php7.0编写动态调用mysql存储过程的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49168731/

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