2012-03-23 2 views
1

함수에 전달 된 매개 변수를 기반으로 쿼리를 실행하는 함수가 작성되었습니다.PHP PDO 함수의 매개 변수는 배열을 반환했습니다.

내가하고 다음이 결과를 반환 이유를 알아낼 수 없습니다

function test2($function_returned_array) 
{ 
    $sql = 'SELECT `name`, `pid` 
      FROM `products` 
      WHERE `name` IN (?)'; 
    $found = $this->db->get_array($sql, $function_returned_array[0]); 
} 

$ function_returned_array [0] 또한이 어떤 결과를 반환하지 않지만

function test($function_returned_array) 
{ 
    $variable = 'Hello World'; 
    $sql = 'SELECT `name`, `pid` 
      FROM `products` 
      WHERE `name` IN (?)'; 
    $found = $this->db->get_array($sql, $variable); 
} 

을 'Hello World'와 동일합니다. 그들은 둘 다 같은 결과를 가져야하지 않습니까? 내가 변수 $와 $ function_returned_array의 값을 에코 때

[0], 그들은 둘 '안녕하세요'

여기에 관련 내 PDO 래퍼의 일부입니다 : 내가 사용

public function query(&$query, $params) 
{ 
    $sth = $this->_db->prepare($query); 

    if(is_null($params)) 
    { 
     $sth->execute(); 
    } 
    else if(is_array($params)) 
    { 
     $sth->execute($params); 
    } 
    else 
    { 
     $sth->execute(array($params)); 
    } 

    $this->_rows = $sth->rowCount(); 
    $this->_counter++; 
    return $sth; 
} 

public function get_array(&$query, $params, $style = PDO::FETCH_ASSOC) 
{ 
    $q = $this->query($query, $params); 
    return $q->fetchAll($style); 
} 

PHP 5.3.5.

도움을 주시면 감사하겠습니다.

+1

이 코드에는 디버깅이 없습니다. 그리고 낯선 사람에게 정신적으로 그것을 디버그하도록 요청합니다. 나는 그것을 -1하지만 PDO 래퍼를 갖기 위해 그만 두지 마라. -이 "열광적 인 프로그래머"사이트에서 거의 본 적이없는 것 –

+0

미안하지만, 나는 그것이 충분히 명확하다고 생각했다. (나는 편집 할 것이다. – noko

+1

왜 쿼리 문자열을 참조로 전달합니까? – Phil

답변

0

나는 PDO에서 같은 문제를 목격했습니다. PDO는 매개 변수가있는 쿼리의 로컬 변수 만 받아들이지 만 참조 또는 인수가 아닌 이유는 확실하지 않습니다.

해결 방법이 될 수 있습니다.

function test2($function_returned_array) 
{ 
    $variable = $function_returned_array[0]; 
    $sql = 'SELECT `name`, `pid` 
      FROM `products` 
      WHERE `name` IN (?)'; 
    $found = $this->db->get_array($sql, $variable); 
} 

업데이트 :

당신이 잘못을하고 있습니다. PDO query()를 get_query() 메소드에 직접 사용하는 것을 보았을 때, 매개 변수화 된 쿼리를 위해 PDO prepare() 문을 사용해야한다.

당신이 여기 PHP 문서에 따라 query.and 모든 매개 변수를 전달하지 않으려는 경우에만이 query() 방법을 사용한다 는

PDOStatement PDO::query (string $statement) 

당신이 전달하고자하는 두 번째 인수가 잘못 구문입니다 .

대신 prepare() 방법을 사용하십시오. 여기 링크가 있습니다.

http://in.php.net/manual/en/pdo.prepare.php

+0

답장을 보내 주셔서 감사합니다. 나는 이것을 시도해 보았지만 여전히 test()와는 다른 결과를 반환했습니다. 그러나, 내가 수동으로 $ function_returned_array [1]의 값을 test2()에서 설정했을 때 효과가있었습니다. 더 이상 아이디어가 없습니까? – noko

+0

나는 당신의 문제를 가지고 있다고 생각하고, 당신은 그것을 잘못하고있다. 아파서 내 설명을 설명과 함께 업데이트하십시오. –

+0

답장을 보내 주셔서 감사합니다. $ sth = $ this -> _ db-> prepare ($ query)에서 prepare() 메소드를 사용하고 있습니다. 나는 모든 것을 다시 보게 될 것이다. 내 코드에 뭔가 다른 것이 틀림 없어! – noko

0

그냥 머리 위로는, 문제는 $ function_returned_array 것을 [0] $ 변수가 정말 같은 일을 동일하지 않았다이었다. $ function_returned_array [0]은 html_entity_decode()를 통해 전달되어야했습니다.