2014-04-05 2 views
-1

나는이 기능을했습니다 :선택하여 call_user_func_array 문제

private function db_bind_array($stmt, &$row) { 
    $md = $stmt->result_metadata(); 
    $param = array(); 
    while($field = $md->fetch_field()) { $param[] = &$row[$field->name];} 
    return call_user_func_array(array($stmt, 'bind_result'), $param); 
} 
private function db_query($sql, $bind_param, $param) { 
    if($stmt = $this->conn->prepare($sql)) { 
    if(!$bindRet = call_user_func_array(array($stmt,'bind_param'), 
    array_merge(array($bind_param), $param))) $this->Terminate(); 
    if(!$stmt->execute()) $this->Terminate(); 
    $res = array(); 
    if($this->db_bind_array($stmt, $res)) return array($stmt, $res); 
    } 
} 

protected function Select($recs, $table, $where, $bind_param, $param, $order_by = '', $sort = '', $limit = 1) { 
    if($order_by != '') $order_by = 'ORDER BY '.$order_by; 
    $sql = "SELECT $recs FROM $table WHERE $where $order_by $sort LIMIT $limit"; 
    return $this->ExeSelect($sql, $bind_param, $param); 
} 
private function ExeSelect($sql, $bind_param, $param) { 
    if($res = $this->db_query($sql, $bind_param, array(&$param))) { 
    $stmt = $res[0]; $row = $res[1]; 
    while($stmt->fetch()) {$this->row = $row; return $row;} 
    $stmt->close(); 
    } 
} 

을 그리고 내가 그것을 사용 $ 행 = $ this-> 선택 ('ID, 이름, 제목,'기사 ', ID>, 'i', 10, 'DESC', '', 10)

문제는 10 대신 하나의 레코드 만 반환한다는 것입니다. 무엇이 문제입니까? 감사합니다.

+1

오, 좋은 일을 위해서, 이처럼 기능을 사용하지 마십시오. 당신이 그것을 부르는 방식을보십시오! 당신이 선택한 것을 말하기 란 불가능합니다! 그것은 완전히 uncomphencible! –

+0

그냥 ExeSelect()를 사용하십시오 - –

+0

어를 사용하는 유일한 분별있는 기능입니다. 그게 내가 찾은 것입니다 ..... 더 나은 점이 있습니까? –

답변

1

이 줄은 while($stmt->fetch()) {$this->row = $row; return $row;}입니다. 즉시 결과를 반환합니다. 배열을 반환하기 전에 빌드하십시오.

private function ExeSelect($sql, $bind_param, $param) { 
    $ret = array(); 
    if($res = $this->db_query($sql, $bind_param, array(&$param))) { 
     $stmt = $res[0]; $row = $res[1]; 
     while($stmt->fetch()) {$ret[] = $row; } 
     $stmt->close(); 
    } 
    return $ret; 
} 
+0

for fetch_assoc for loop? –

+0

솔직히 말해서 대부분의 코드를 버리고 mysqli 함수 만 사용해야합니다. 의미있는 객체 추상화를 작성하지 않고 오히려 더 많은 혼동을 추가합니다. – akirk

+0

좋아, 준비하고 묶는 게 더 좋을까? 고마워요 –

관련 문제