所以我遇到了一些问题。我知道一个解决方案,但它看起来不太干净,我想知道是否有更好的解决方案。
我正在编写一个mysqli包装器,用于运行准备好的语句。因为它是一个包装器,可以重用
(动态)
返回的列数取决于查询,并且不是静态的。
我已经找到了一个解决这个问题的方法,似乎每个人都在使用
call_user_func_array
.
它是有效的,但我的问题是它让我创建了一个额外的引用数组,在一开始我不应该真正需要它。
例如:
<?php
// Connect, prepare statement, etc.
$stmt->execute();
$fields = $stmt->result_metadata();
$fields = $fields->fetch_fields();
foreach ($fields as $field) {
// Unnecessary creation of an array.
$params[] = &$row[$field->name];
}
call_user_func_array(array($stmt, 'bind_result'), $params);
?>
现在我正在创建另一个数组
调用用户函数数组
通过引用传递参数,因为它不符合方法定义。
有办法吗
调用用户函数数组
是否遵守方法/功能定义?是否有更清晰的方法来调用参数数目可变的方法/函数?或者,是否只有一个整体上更清洁和更好的解决方案来解决这个问题?
我打电话时也遇到类似的问题
bind_param
同时尝试保持能够更改绑定参数和重新运行语句的功能不变。
在某些方面,下面的代码究竟在做什么。
$row[$field->name] = &$row[$field->name];
它奇怪地工作,不会产生任何错误,尽管我不知道变量如何引用自己。除了我没有创建另一个数组这一事实之外,它和前者有什么区别吗?这样比较好吗?
谢谢。
编辑:
这就是我如何使用反射API而不是
call_user_fun_array
. 关于我使用它的任何输入,性能与
调用用户函数数组
非常感谢您的实施。我以前没把它搞得一团糟,而且几乎所有的方法都是没有文件证明的,所以我不确定使用它们的正确方法。
<?php
foreach ($fields as $field) {
$row[$field->name] = NULL;
}
$refMethod = new ReflectionMethod($stmt, 'bind_result');
$refMethod->invokeArgs($stmt, $row);
?>