2013-08-10 2 views
1

아래 코드에서 foreach 문에서 변수 $ 행이 어디서 왔는지 알려 줄 수 있습니까?

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 (..)에받을 수 있었다 않은 모든 :

[{"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}] 

결과에서 볼 수 있듯이 행 당 열이 예상대로 표시됩니다.

+0

while ($ row = $ cmd-> fetch) while while mean 의미 : – Stony

+0

모든 사람 참고 사항 : "$ params [] = & $ row [$ field-> name];" $ row 변수를 정의하는 것입니다. –

답변

3

첫 번째 while 루프에서는 참조 연산자 & 때문에. 전에는 존재하지 않습니다.

라인 $params[] = &$row[$field->name]$row 변수를 생성합니다. PHP는 존재하지 않는 $row에 대한 참조를 취하고 싶어하기 때문에 아무런 메시지없이 생성합니다. (저에게 묻는다면 버그 소스 일 것입니다). $row은 키가 $field->name으로 설정된 배열로 만들어집니다.

$row가 아니라 while 루프에서의 foreach 루프에 존재한다. 거기에 빈 값을 가진 배열로 만들어집니다.

모든 것이 상당히 난독 화 된 코드이며 읽기가 쉽지 않습니다. 때때로 코드에서 장황한 것이 좋은 것입니다.

+0

필자는 "$ params [] = & $ row [$ field-> name];" $ row 변수가 생성됩니다. –

+0

바. PHP가 싫어 :) 답변을 게시하십시오. –

+1

@MeshMan은 내 대답을 업데이트했습니다. 참조 연산자를 사용할 때 PHP는 자동으로 변수를 만듭니다. 나는 오늘도 뭔가를 배웠다.;). –

-1

일반적으로 사람들은 mysql_fetch_row($result)의 결과로 $row을 선언합니다. 여기에서 $result은 SQL 데이터베이스를 쿼리 한 후 얻을 수 있습니다. 그러나 여기서는 아무 것도 언급되지 않았으므로 코드가 실제로 작동해야한다고 생각하지 않습니다.

편집 : 분명히 이것이 전체 파일이 아니며 위의 어딘가에 정의되어있는 경우 예외가됩니다. 하지만 그래, 달리 작동해서는 안됩니다.

+0

완벽하게 작동합니다. . –

+3

작품으로 완벽하게 나는 당신이 "아무것도하지 않는다"는 것을 의미한다고 생각한다. –

+0

아니, 나는이 제품이 생산하는 배열이 정확히 내가 기대했던 것임을 의미한다. 결과 쿼리의 열은 결과 배열에서 완벽하게 설정됩니다. –

관련 문제