2012-11-04 4 views
0

내 PgSQL 어댑터에 문제가 있습니다. 네이티브 드라이버를 사용하고 pg_fetch_ * 메서드는 열 유형이 정수 또는 부울 인 경우에도 문자열 만 반환합니다.잘못된 pg_fetch_ * 반환 형식이 잘못되었습니다

정수의 경우 큰 문제는 아니며 단순한 캐스트입니다.

진짜 문제는 불리언 값입니다. 왜냐하면 'TRUE'의 경우 문자열 't'가 반환되고 FALSE의 경우 'f'가 반환되기 때문입니다.

좋아, ... 간단한 해결책이를 위해 내가 부울 필드가 매번 검증을하지만, 그것은 현명한 일이 아니다

하나 특정한 경우 내가 MySQL을 실행하는 거대한 응용 프로그램을 마이그레이션 할 것입니다 PgSQL을하고 많은 조건을 바꿀 것입니다.

Google에서 무언가를 찾으려고 시도했지만 (잘못된 키워드 조합을 사용했는지 모르겠 음) 실패했습니다.

샘플 코드 :

$db = pg_connect("host=localhost dbname=**** user=**** password=**** port=5432") or die("Could not connect"); 
pg_set_error_verbosity(PGSQL_ERRORS_VERBOSE); 
$sql = 'SELECT * FROM mesa'; 
$result = pg_query($db, $sql); 
var_dump(pg_last_error($db)); 

$data = array(); 
while($row = pg_fetch_assoc($result)) { 
    $data[] = $row; 
} 
var_dump($data); 

출력 :

array (size=10) 
    0 => 
    array (size=3) 
    'numero' => string '2' (length=1) 
    'max_pessoas' => string '8' (length=1) 
    'status' => string 't' (length=1) 
1 => 
    array (size=3) 
    'numero' => string '3' (length=1) 
    'max_pessoas' => string '8' (length=1) 
    'status' => string 't' (length=1) 

그리고 계속하지만, 'NUMERO'는 정수 '상태가'부울입니다.

+0

"the native driver". PHP에 내장 된 드라이버를 의미합니까, http://www.php.net/manual/en/book.pgsql.php? 그렇다면 어떤 PHP 버전과 어떤 PostgreSQL 버전을 사용하고 있습니까? –

+0

또한 코드를 보여주십시오. 쿼리를 실행하는 PHP와 SQL과 결과가 문자열임을 나타내는 PHP. 또한 "내가 Google에서 뭔가를 찾았습니다"라고 말하면 ... * 당신이 말하는 것을 알고 있습니다. –

+0

죄송합니다 ... 글쎄, 나는 Google에서 아무 것도 찾지 못했다고 말했고, PHP 매뉴얼에 대한 코멘트 만 : http://br.php.net/manual/it/function.pg-fetch-assoc.php#108957 –

답변

0

사실 PHP는 't'를 true로, 'f'를 false로 반환합니다. 당신은 이것들에 대한 당신 자신의 처리를 생성하거나 그것을 추상화하는 프레임 워크를 사용해야한다. 불행히도 언어가 최소한 PHP 4.0 이후에 작동했던 방식입니다 ....

관련 문제