2011-09-15 4 views
0

나는이 함수를 가지고SQL Select는 PHP에서는 작동하지 않지만 mysql 서버에서는 작동하지 않습니다.

public function populate($id) { 
    $pdo = new PDOConfig(); 

    $sql = "SELECT * FROM ".$this->table." WHERE `id` = :id"; 

    $q = $pdo->prepare($sql); 
    $q->execute(array(":id"=>$id)); 
    $resp = $q->fetchAll(); 
    foreach ($resp as $row) { 
     foreach ($row as $key=>$value) { 
      if(!is_int($key)) 
       $this->$key = html_entity_decode($value, ENT_QUOTES); 
      if($value == null) { 
       $this->$key = null; 
      } 
     } 
    } 

    $pdo = null; 
    unset($pdo); 
} 

어느 작품.

$sql = "SELECT * FROM ".$this->table." WHERE `id` = :id"; 

$sql = "SELECT * FROM ".$this->table." WHERE `id` = :id AND `life` > 0"; 

로 변환하려고 시도합니다. 그러나 터미널 내에서 sql에서이 함수를 실행하면 정상적으로 작동합니다. 테이블에는 필드 수명이 있으므로 쿼리가 제대로 작동해야합니다. 내가 뭘 놓치고 있니?

감사

+4

"It breaks". 어떤 오류가 발생하고 있습니까? –

+0

좋은 질문, 이상하게도, 아무도. 파싱이 SQL 자체에서 파손되는 것이 더 많습니다. print_r $ resp를 사용하면 파싱을 중간에 중단하고 스크립트를 중단합니다. – willium

+0

mysql_connect를 사용하고 있지 않다 ... – willium

답변

3

당신은 여기에 게시하지 않은 어느 PHP 코드 나 $id 변수의 값에 의해 생성 된 실제 SQL 쿼리. 이것은 당신이 정말로 그들을 검사하지 않았다고 생각하게합니다. 그래서 라고 말하면«이 함수는 터미널 내에서 SQL을 실행하지만 모두 잘 작동합니다» 아마도 생성하려는 SQL 쿼리를 참조하고있을 것입니다. 따라서 문제는 PHP 코드가 쿼리 및 값을 보내지 않는다는 것입니다.

문제 해결 단계 : $q->execute(array(":id"=>$id)); 전에

  1. 오른쪽, $sql$id의 값을 검사합니다. var_dump() 또는 선택한 디버거를 사용할 수 있습니다. 첫 번째 경우에는 브라우저에서 렌더링 된 뷰를 신뢰하지 마십시오. 대신 소스보기 메뉴를 사용하십시오.

  2. 예상되는 결과와 비교하십시오.

  3. PDO 하위 클래스가 오류를 캡처하는지 확인하십시오. 가장 간단한 방법은 XSELECT * FROM과 같이 의도적으로 SQL 구문 오류를 만드는 것입니다.

관련 문제