2013-04-17 2 views
-1

기본적으로 나는 온라인에서 찾은 mySQLi 래퍼를 사용하고 있으며, 그것을 사용하려고 할 때 나는 과거에 접근 할 수없는 문제를 발견했다. 기본적으로 나는 수행하고있다. 이.활성 행 배열 내에서 쿼리 수행하기

<?php 
    $res = $DB->Query("SELECT * FROM `table`"); 
    while($row = $DB->Fetch()) { 
?> 
<tr> 
    <td><?php echo $row['id']; ?></td> 
    <td><?php echo $functions->checkStatus($row['arowhere']); ?></td> 
</tr> 
<?php 
     } 
?> 

그래서 난 내 테이블 행에이 기능 안에 새 쿼리를 수행 $functions->checkStatus($row['arowhere']);이,이 변화하고 할 노력하고있어 때 최신형 while($row = $DB->Fetch()) {

public function Query($SQL) { 
     $this->SQL = $this->mysqli->real_escape_string($SQL); 
     $this->Result = $this->mysqli->query($SQL); 

     if ($this->Result == true) { 
      return true; 
     } else { 
      die('Problem with Query: ' . $this->SQL); 
     } 
} 

public function Fetch() { 
    return mysqli_fetch_assoc($this->Result); 
} 
에 사용되는 쿼리

해결책이 있습니까, 아니면 누군가 올바른 방향으로 나를 가리킬 수 있으므로이 문제를 피할 수 있습니다.

+1

예,이 같은 래퍼를 사용하지 않는 ..이 사용할 이유가 전혀 없다, 간단한 PDO/MySQLi 객체는 모든없이 같은 일 두통 .. – dbf

+0

@dbf 그래서 전체 응용 프로그램을 녹음하는 것이 좋습니다. –

+0

오버 헤드를 사용하지 않는 것이 좋습니다.) 응용 프로그램을 다시 코딩해야하는 경우에는 귀하에게 달려 있습니다. 그냥 작은 참조 가이드를 작성하십시오. 래퍼 클래스가있는이 예제의 작은 코드 하나와 pure mysqli 기능 만있는 예제. 래퍼 클래스가 장점 (단점)을 추가하지 않으면 선택 사항을 알 수 있습니다. – dbf

답변

1

나는이 래퍼를 온라인에서 찾을 수 없다고 생각합니다. 사실, 입니다. 궁극적으로는 사용할 수 없습니다.

Doing mysqli->real_escape_string($SQL);은 전혀 의미가 없습니다. 그것은 당신의 질의를 주입으로부터 보호하지 못한다. 그러나 그것은 복잡한 쿼리를 망칠 것이다. WHERE 조건을 가진 쿼리를 실행하자마자 오류로 인해 죽을 것입니다.

그리고 그것은 당신에게 오류도 파일과 줄 번호도 표시되지 않는 것으로 다음 줄은

die('Problem with Query: ' . $this->SQL); 

잘못된 것입니다.

그리고 적어도 이 래퍼의 문제는 당신이 직면 한 - 그것은 결과를 저장하는 내부 변수를 사용하고, 반면이해야 단지 반환 그것.

A real mysqli wrapper is SafeMysql이 정보를 사용하면 자리 표시자를 통해 동적 데이터를 추가 할 수 있습니다. SafeMysql와

코드가 작동합니다 :

<?php 
    $res = $DB->query("SELECT * FROM `table`"); 
    while($row = $db->fetch($res)) { 
?> 
<tr> 
    <td><?php echo $row['id']; ?></td> 
    <td><?php echo $functions->checkStatus($row['arowhere']); ?></td> 
</tr> 
<?php 
     } 
?> 
0

행을 반복하여 임시 배열에 추가 할 수 있습니다. 그런 다음 다른 쿼리가 수행 된 후이 배열을 통해 행을 참조 할 수 있습니다. 쿼리에서 너무 많은 행을 반환하는 경우 메모리 관련 문제가 발생할 수 있으므로주의해야합니다.

<?php 
$res = $DB->Query("SELECT * FROM `table`"); 

$rows = array(); 
while($row = $DB->Fetch()) { 
    array_push($rows, $row); 
} 

foreach($rows as $row){ 
?> 
    <tr> 
     <td><?php echo $row['id']; ?></td> 
     <td><?php echo $functions->checkStatus($row['arowhere']); ?></td> 
    </tr> 
<?php 
} 
unset($rows); // destroys the temporary array, freeing the memory it consumed 
?>