2013-03-19 2 views
0

저는 PDO를 사용하여 PostgreSQL으로 응용 프로그램을 개발하고 있습니다. 문제는 PDOStatement::bindValuePDOStatement::bindParam 같은 바인딩 기능이 전혀 작동하지 않는다는 것입니다.PDO가 PostgreSQL 쿼리를 바인딩하지 않습니다

나는 다음과 같은 코드가 있습니다

<?php 

    try{ 

     $db = new PDO("pgsql:dbname=test;host=localhost", "user", "password"); 

     $all = '*'; 
     $sql = $db->prepare("SELECT :all FROM schema.table"); 
     $sql->bindValue(':all', $all); 

     var_dump($sql->queryString); 
     var_dump($sql->execute()); 

    } 

    catch(PDOException $e){ 
     print $e->getMessage(); 

    } 

?> 

난 그냥 이유를 이해할 수 없다을 $sql->queryString의 값이 여전히 SELECT :all FROM schema.table입니다 var_dump()이 같은 '여기 거라고.

PDOStatement::bindParam 정확히 같은 일을한다.

팁이 있습니까?

편집 :이 쿼리는 디버깅 용으로 만 사용됩니다! 제발, 쿼리 자체에 대해 신경 쓰지 마라. 바인딩하지 않는 방법.

답변

3

준비된 문은 그런 식으로 작동하지 않습니다. 엔티티가 아닌 값만 바인딩 할 수 있습니다.

은 지금까지 당신의 문, 쿼리 SELECT '*' FROM schema.table, 하지SELECT * FROM schema.table 당신이 (설계 결함 시간의 약 80 %를 의미) 변수 엔티티를 원하는 경우

실행하고 관한 한, 당신은 것입니다 문자열 보간 (또는 연결 - 당신이 요점을 얻을) 리조트해야합니다.

+0

그래, 알아. 나는 이것을 디버깅 목적으로 사용하고있다. 메서드는 어쨌든 바인딩해야합니다, 안 그래야합니까? –

+0

@RodrigoSiqueira 쿼리에 대해 일치하는 행이 여러 번 반복되는 문자열'*'을 반환합니다. 그렇습니다. 그것은 구속력이 있지만, 당신이 생각하는 것이 아닙니다. – Corbin

+0

'$ sql-> execute()'를 실행함으로써, 내 코드는 데이터베이스에서 문자열'SELECT : all FROM schema.table'를 질의합니다. 쿼리가'SELECT '*'FROM schema.table' 또는'SELECT * FROM schema.table'이라면, 정상적으로 작동 할 것이기 때문에 나는 꽤 행복 할 것이다. –

관련 문제