Php 以下代码的bind_result snip中引用的变量来自何处?

Php 以下代码的bind_result snip中引用的变量来自何处?,php,mysqli,Php,Mysqli,我正在学习mysqli的预处理语句,我很难找出以下代码中变量$row的来源,这些代码最初是由hamidhossain在手册页面中发布的,完整代码请参见链接 if ($stmt = $mysqli->prepare("SELECT * FROM sample WHERE t2 LIKE ?")) { $tt2 = '%'; $stmt->bind_param("s", $tt2); $stmt->execute(); $meta = $st

我正在学习mysqli的预处理语句,我很难找出以下代码中变量$row的来源,这些代码最初是由hamidhossain在手册页面中发布的,完整代码请参见链接

if ($stmt = $mysqli->prepare("SELECT * FROM sample WHERE t2 LIKE ?")) { 
    $tt2 = '%';
    $stmt->bind_param("s", $tt2); 
    $stmt->execute(); 

    $meta = $stmt->result_metadata();
    while ($field = $meta->fetch_field())
    {
        # Where does $row come from?
        $params[] = &$row[$field->name];
    } 

    call_user_func_array(array($stmt, 'bind_result'), $params);

    while ($stmt->fetch()) { 
        foreach($row as $key => $val) 
        { 
            $c[$key] = $val; 
        } 
        $result[] = $c; 
    } 

    $stmt->close(); 
} 
在完整的代码中,第一次提到变量$row时在以下行:

$params[] = &$row[$field->name];

这个$row变量来自哪里?我知道您必须使用call\u user\u func\u数组,但我不知道变量$row来自何处。

它不是来自任何地方:它没有初始化。然而,第一次像这样访问它时,它就用该键构成了一个数组。c美元也是如此。如果你问我的话,那就是草率的代码。嘿,Wrikken,我不太明白你第一次这样访问它是什么意思。还有,你会怎么做?我想学习所有的最佳实践,决不做马虎的事。谢谢!如果您只是在没有任何其他内容的情况下运行该行:$arr=&$row[foobar];var_dump$row;,您可以看到,$row是“神奇地创建的”。一个简单的实例化$row=array$c=阵列;已经对代码有很大帮助,但是如果您不需要绑定到显式变量,您应该只使用and。嘿,Wrikken,非常感谢您的解释。我完全理解你的意思。然而,我遇到的问题是试图找出$row变量从何处获取数据,以及整个过程如何产生最终结果。一定有我遗漏的东西。一旦while循环运行,$row数组就存在了,然后这些引用中的每一个都会被添加到while循环每次迭代的$params[]数组中。但一旦它们作为引用添加到$params数组中作为单个元素,当我对$params执行var转储时,它只会对每个元素显示[0]=>&NULL。。。然后,一旦我运行call_user_func_数组,然后对$params执行var转储,它就会添加类型,而不是$field->name作为键。$arr=&$row[$field->name]不应该将字段名作为$arr数组的键吗?