이상한 상황을 이해하는 데 도움을 줄 수 있습니다. ip (inet) 및로드 (정수) 열이있는 postgres 데이터베이스 '서버'가 있습니다. 다음과 같이 psql을 통해로드 값을 수동으로 업데이트 할 수 있습니다.
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_prepare
and pg_execute
문을 사용해 보았습니다 . 여전히 출력이없고 데이터베이스도 변경되지 않습니다.
내가 뭔가를 놓치고 있습니까? 이 문제를 해결할 수있는 쉬운 방법이 있습니까? (다시 추가 할 수 있도록로드를 얻기 위해 별도의 쿼리를 사용하지 않는 것이 좋습니다).
이 문제를 해결했습니다. 왜 이것이 문제인지 확실하지 않지만 모범 사례가 결국 문제를 해결하는 데 도움이 된 것으로 나타났습니다.
단일 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));
다시 말하지만, 이것이 왜 문제를 해결했는지 모르겠지만 해결되었습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다