2014-07-21 18 views
0

이상한 상황을 이해하는 데 도움이 될 수 있습니다. 나는 IP (inet) 및로드 (정수) 열이있는 postgres 데이터베이스 '서버'를 가지고 있습니다. 다음과 같이 psql을 통해 수동으로로드 값을 업데이트 할 수 있습니다.PHP는 Postgres 데이터베이스에서 값을 늘릴 수 없습니다.

UPDATE servers 
    SET load = load + 100 
WHERE ip = '10.10.10.10'; 

로드 업데이트를 자동화하는 PHP 스크립트를 작성했습니다. 그러나 'value = value + x'구문이 현재 작동하지 않습니다.

pg_query($conn, "UPDATE servers SET load = 100 WHERE ip = '10.10.10.10'"); 

이되지 않습니다 :

본 작품

pg_query($conn, "UPDATE servers SET load = load + 100 WHERE ip = '10.10.10.10'"); 

는 후자를 사용하여, 스크립트는 응답을주지 않고 무기한 중단됩니다. 끝에 or die(pg_last_error()) 절을 추가하는 등의 변형을 시도했습니다. 또한 pg_preparepg_execute 문을 사용해 보았습니다. 출력이없고 데이터베이스가 변경되지 않았습니다.

내가 누락 된 항목이 있습니까? 이 문제를 해결할 수있는 쉬운 방법이 있습니까 (차라리 별도의 쿼리를 사용하여 다시로드 할 수 있으므로로드를 다시 추가 할 수 있습니다).

+1

테이블 만들기 SQL을 표시하십시오. –

+0

'psql'에서 PostgreSQL에 연결하고'select * from pg_stat_activity' 명령을 사용하면 거기에 쿼리가 표시됩니까? 그것은'waiting = t'입니까? –

+0

@DwayneTowell : 근무 정책에 따라 데이터베이스에 대한 세부 정보를 제공 할 수 없습니다. :/언급 한 바와 같이, 내가 작업하고있는 열은 inet 열과 정수 열입니다. – vastlysuperiorman

답변

0

이 문제가 해결되었습니다. 왜 이것이 문제 였는지 확신 할 수는 없지만 모범 사례가 결국 문제를 해결하는 데 도움이되었다는 것이 밝혀졌습니다.

단일 pg_query를 실행하는 대신 적절한 변수를 설정하고 pg_query_params를 사용했습니다. 이것은 문제에 관계없이 좋은 아이디어 일 것입니다.

$myQuery = "UPDATE servers SET load = load + $1 WHERE ip = '$2'"; 
$serverIP = '10.10.10.10'; 
$loadAdded = '1234'; 
$result = pg_query_params($conn, $myQuery, array($loadAdded, $serverIP)); 

다시이 문제가 저에게이 문제를 해결 한 이유는 무엇입니까?

관련 문제