Php $row在哪里定义?

Php $row在哪里定义?,php,mysql,Php,Mysql,在下面的代码中,有人能告诉我foreach语句中变量$row的来源吗 public function getProcResultSet($cmd) { try { $meta = $cmd->result_metadata(); while ($field = $meta->fetch_field()) { $params[] = &am

在下面的代码中,有人能告诉我foreach语句中变量$row的来源吗

public function getProcResultSet($cmd)
    {
         try
        {
            $meta = $cmd->result_metadata();

            while ($field = $meta->fetch_field())
            {
                $params[] = &$row[$field->name];
            }

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

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

                $results[] = $c;
            }

            return $results;
        }
        catch (Exception $e)
        {
            logToFile("Exception: " . $e);
            return resultFailedUnknown();
        }
}
编辑,以下是此函数的调用方:

public static function getPlayerUnits($playerId, $unitTypeId)
    {
        $mysqli = new mysqli(GDB_HOST, GDB_USERNAME, GDB_PASSWORD, GDB_NAME);

        if ($mysqli->connect_errno)
        {
            throw new Exception('DB Connection Failed. Error Code: ' . $mysqli->connect_errno);
        }

        $cmd = $mysqli->prepare('CALL sp_get_player_units(?, ?)');

        if (!$cmd)
        {
            throw new Exception($mysqli->error);
        }

        $cmd->bind_param('ii', $playerId, $unitTypeId);
        $cmd->execute();

        $results = parent::getProcResultSet($cmd);

        $cmd->close();
        $mysqli->close();

        return $results;
    }
这是一个结果数组,我所做的只是在客户端和JSON.stringify(..)上接收它:


如您所见,结果按预期显示每行的列。

在第一个
while
循环中,因为引用运算符
&
。但它以前并不存在

$params[]=&$row[$field->name]
创建
$row
变量。所发生的事情是,PHP想要引用一个不存在的
$row
,所以它创建它时没有任何消息(如果你问我的话,这是一个相当大的错误源)。
$row
创建为数组,其中键
$field->name
设置为空

$row
不存在于
foreach
循环中,但不存在于
while
循环中。在那里,它被创建为一个具有空值的数组


整个过程都是非常模糊的代码,可读性不强。有时代码冗长是一件好事。

通常人们将
$row
声明为
mysql\u fetch\u row($result)
的结果,其中
$result
是查询SQL数据库后得到的结果。然而,我没有看到这里提到的任何地方,所以我认为您的代码实际上不应该工作


编辑:显然,例外情况是,如果这不是您的整个文件,并且它是在上面的某个位置定义的。但是,是的,不应该这样做。

它没有定义,也许你的意思是($row=$cmd->fetch)请大家注意:“$params[]=&$row[$field->name];”这一行定义了$row变量。我认为你的意思是“它什么都没做”不,我的意思是它生成的数组正是我所期望的。结果查询中的列在结果数组中设置得非常完美。很抱歉,我不相信这一点。这段代码不可能完美运行,除非您没有向我们展示一些东西。我已经用调用者更新了原始帖子。我马上为您获取结果数组……您真的确定调用的是这个函数吗?有可能它被其他地方覆盖了。(添加一些
echo
s或要确认的内容。)我已确认行“$params[]=&$row[$field->name];”正在创建$row变量.bah。我讨厌PHP:)请发布一个答案。@MeshMan更新了我的答案,显然,当使用引用运算符时,PHP会无声地创建变量。我今天也学到了一些东西似乎是一致的。操作码格式显示
FETCH\u DIM\u W
。PHP手册中有这样一个条目,但这很荒谬。哦,好吧……还发现了2000年12月的一份bug报告,其中说它应该是这样工作的:
[{"Id":1,"Name":"Machine Gunner","Quantity":0},{"Id":2,"Name":"Rocket Soldier","Quantity":0},{"Id":3,"Name":"Paratrooper","Quantity":0},{"Id":4,"Name":"Demolition Soldier","Quantity":0}]