2014-11-26 2 views
0

db 쿼리를 준비된 구문으로 변환하는 중입니다. 다음과 같은 시나리오가 주어지면 어떻게 결과 바인딩을 수행 할 수 있습니까? 즉조건부 결과 바인딩

function getRecord($type = 1) 
{ 
    $sql = "select field1, field2, field3"; 

    if ($type == 2) $sql .= ", field4, field5"; 

    $sql .= " from table"; 
    $sql .= " where field1 = 'somevalue'"; 

    $result = mysqli_query($conn, $sql) or die(mysqli_error()); 

    if ($record = mysqli_fetch_assoc($result)) 
    { 
     $val1 = $record['field1']; 
     $val2 = $record['field2']; 
     $val3 = $record['field2']; 

     if ($type == 2) 
     { 
      $val4 = $record['field4']; 
      $val5 = $record['field5']; 
     } 
    } 
} 

:

function getRecord($type = 1) 
{ 
    $stmt = mysqli_stmt_init($conn); 

    $sql = "select field1, field2, field3"; 

    if ($type == 2) $sql .= ", field4, field5"; 

    $sql .= " from table"; 
    $sql .= " where field1 = ?"; 

    if (mysqli_stmt_prepare($stmt, $sql)) 
    { 
     mysqli_stmt_bind_param($stmt, 's', 'somevalue');    
     mysqli_stmt_execute($stmt); 
     mysqli_stmt_bind_result($stmt, $record['field1'], 
             $record['field2'], 
             $record['field3']); 
     if ($type == 2) 
     { 
      // How do I bind the rest of the results? 
     } 

     if (mysqli_stmt_fetch($stmt)) 
     { 
      // Do something 
     } 

     mysqli_stmt_close($stmt); 
    } 
} 

어떻게 결과 경우 ($ 유형 = 2)의 나머지 부분을 결합 하는가?

+0

귀하의 질문은 이보다 조금 더 구체적이어야합니다. –

+0

@RobertHarvey 그 밖의 무엇을 알아야합니까? – gr8dane

+0

@ gr8dane 그냥 확인 : http://php.net/manual/es/mysqli.prepare.php –

답변

0

그것은 간단하다 :

if ($type == 2) { 
    mysqli_stmt_bind_result(
    $stmt, 
    $record['field1'], 
    $record['field2'], 
    $record['field3'], 
    $record['field4'], 
    $record['field5'] 
); 
} else { 
    mysqli_stmt_bind_result(
    $stmt, 
    $record['field1'], 
    $record['field2'], 
    $record['field3'] 
); 
} 

을 왜 당신은 심지어이 필요하십니까?

+0

나는 *을 선택할 수 있다고 생각하지만 실제 필요한 데이터 만 얻는 경우는 없다. 이것은 분명히 한 가지 방법 일 수 있지만, $ type이 두 개 이상의 값을 가질 수 있다면 부피가 커질 수 있습니다. 그리고 그것을 수행하는 더 깨끗한 방법이 있는지 궁금합니다. – gr8dane

+0

[this] (http://php.net/manual/en/mysqli-stmt.fetch.php#82742) php.net 주석을 읽으십시오. –