2017-09-12 1 views
-2

PHP에서 일부 클래스와 메서드를 만들려고하는데 일부 함수는 좋은 출력이지만 최종 출력에서는 변수를 throw 할 수 없습니다. 이것은 내 클래스입니다. 여기클래스가 객체를 반환 할 수 없습니다.

난에서

$fields = array('nik'); 
    $query = new Query(); 
    $query 
     ->select($fields) 
     ->from('data_asset_hw') 
     ->orderby('nik','DESC') 
     ->execute('fetchAll'); 

    print json_encode($query); 

선택 클래스, 전화 ORDERBY이 좋다. 하지만 난 마지막 함수 (실행)에서 출력을 얻을 수 없습니다, 그냥 null이 개체는 {} 발견 발견.

아래 클래스의 execute()을 참조하십시오. 수동으로 쿼리 개체를 인쇄하면 출력이 정상적으로 처리됩니다. 그러나 만약 내가 이것을 사용한다면 $query. 출력이 null 인 것으로 나타났습니다. 어쩌면 내가 놓친 것일까?

<?php 
Class Query 
{ 
private $query; 
function __construct(){ 
    $this->query = ""; 
} 

function select($fields=array()){ 
    if(!is_array($fields)){ 
     $sql = sprintf("SELECT %s ",$fields); 
     $this->query .= $sql; 
     return $this; 
    }else{ 
     $fields = implode("`, `", $fields); 
     $sql = sprintf("SELECT `%s` ", $fields); 
     $this->query .= $sql; 
     return $this; 
    } 
} 

function from($table){ 
    $table = trim(strtolower(stripslashes($table))); 
    $sql = sprintf("FROM %s ", $table); 
    $this->query .= $sql; 
    return $this; 
} 

function orderby($field,$order){ 
    $sql = sprintf("ORDER BY %s %s", $field,$order); 
    $this->query .= $sql; 
    return $this; 
} 

function where($command){ 
    $sql = sprintf("WHERE %s ", $command); 
    $this->query .= $sql; 
    return $this; 
} 

function execute($fetch){ 
    try{ 
     $database = DatabaseFactory::getFactory()->getConnection(); 
     (string)$this->query; 
     $query = $database->prepare($this->query); 

     if(!$query){ 
      throw new Exception('The SQL statement can not be prepared!'); 
     } 

     $execute = $query->execute(); 
     if(!$execute){ 
      throw new Exception('The PDO statement can not be executed!'); 
     } 
     // output is normally 
     print_r($query->$fetch()); 
     // cannot return object 
     return $query->$fetch(); 
    } catch (PDOException $pdoException) { 
     echo '<pre>' . print_r($pdoException, true) . '</pre>'; 
     exit(); 
    } catch (Exception $exception) { 
     echo '<pre>' . print_r($exception, true) . '</pre>'; 
     exit(); 
    } 
} 
} 

오류가 발생했습니다. public $ output;을 추가하십시오. $ this-> output = $ query -> $ fetch()를 반환합니다. 그리고 wata ..... 나는 벌써 끝났다. 감사합니다. 나쁜 영어로 죄송합니다.

+5

결과가 이미 'print_r'으로 페치됩니다. __can__t__을 두 번 가져 오면'print_r' 줄을 제거하십시오. –

+0

'$ result = $ query -> ...-> execute ('fetchAll'); echo json_encode ($ result)'? 또한 모든 print_r 명령문은 JSON 응답을 망칠 것입니다. – Phil

+1

의도적으로'fetch' 앞에'$'이 있습니까? '$ query -> $ fetch()'편집 : 아, 이제 알겠지만 ... 그러나 u_mulder는 정확합니다. – Jakumi

답변

0

같은 개체 공공 $ 출력을 추가 정의;

으로 사용하십시오. $ this-> output = $ query-> fetch();

공개 할 수 있기 때문에 페이지에 표시 할 수 있습니다.

감사합니다.

-2

$query = new query($mysqli); 
관련 문제