2011-06-10 6 views
1

내 PHP 파일에서 MERGE INTO 문을 사용하여 멀티 플레이어 게임용 MySQL 데이터베이스를 업데이트하거나 삽입하려고합니다.MySQL 데이터베이스에 대해 PHP에서 MERGE INTO 문 사용시 문제

이 PHP 파일은 자바 스크립트 파일에서 다음 줄로 호출

:

xmlhttp.open('GET', "phpsqlajax_genxml.php?" + "lat=" + lla[0] + "&heading=" + truckHeading + "&lng=" + lla[1] + "&velocity0=" + vel0 + "&velocity1=" + vel1 + "&velocity2=" + vel2 + "&id=" + playerNumber, true);

이는 PHP를 전송됩니다 여기

내가 달성하기 위해 노력하고있어 자세한 설명입니다 파일 정보를 사용하여 데이터베이스를 업데이트하십시오. 이 플레이어가 새로운 플레이어가되어이 정보가 처음 전송되면 데이터베이스의 새 행이 만들어 지거나 정보를 업데이트해야하는 현재 플레이어가됩니다.

새로운 플레이어 인 경우 "id"는 데이터베이스에 아직 존재하지 않는 것입니다.

데이터베이스가 업데이트되지 않고 새 행이 추가되지 않습니다. 머지 (MERGE) 문을 사용하는 데 많은 경험이 없으므로 문법 오류라고 생각합니다. 이 경험이있는 사람이 내가 잘못하고있는 일을 알려주시겠습니까? 당신이하는있는 변수 이해할 수 있도록 여기에

문 INTO 병합하기 전에 코드입니다 :

$id = $_GET['id']; 

$lat = $_GET['lat']; 

$lng = $_GET['lng']; 

$heading = $_GET['heading']; 

$velocity0 = $_GET['velocity0']; 

$velocity1 = $_GET['velocity1']; 

$velocity2 = $_GET['velocity2']; 

ID가 열 머리글입니다, $ ID가 ID가 여기에

가 전달되고 내 내 PHP 파일에서 문 INTO 현재 MERGE는 :

MERGE INTO markers USING id ON (id = $id) 
    WHEN MATCHED THEN 
    UPDATE SET lat = $lat, lng = $lng, heading = $heading, velocityX = $velocity0, velocityY = $velocity1, velocityZ = $velocity2 
    WHEN NOT MATCHED THEN 
    INSERT (id, name, address, lat, lng, type, heading, velocityX, velocityY, velocityZ)  VALUES ($id, 'bob', 'Poop Lane', $lat, $lng, 'Poop', $heading, $velocity0, $velocity1, $velocity2) 

답변

4

PHP 데이터베이스 라이브러리는 변함없이 아무것도 통화 중에 실패 할 경우 자신의 다양한 함수 호출이 FALSE를 반환합니다. 당신은 mysql_로 /mysqli_에있어 가정, 당신은 같은 일을 할 수 shoudl :

$sql = "MERGE INTO ...."; 
$result = mysql_query($sql); 
if ($result === FALSE) { 
    die(mysql_error()); 
} 

그것은 데이터베이스 호출에서 반환 값을 확인하지하는 것은 좋은 방법입니다. 쿼리 문자열이 구문 적으로 100 % 유효하더라도 쿼리가 실패 할 수있는 방법은 너무 많습니다. 모든 것이 제대로 작동한다고 가정하면 매우 나쁜 상황에 처할 수있는 가장 쉬운 방법입니다. 또한, 일이 실패 할 때, 오류 처리의 부족은 단순히 오류의 실제 이유를 숨기고 그래서 당신은 결국 이런 대답을 얻게됩니다.

오, 잊기 전에 ... MySQL은 "MERGE INTO ..."를 지원하지 않으므로 전체 쿼리가 구문 오류입니다. "REPLACE INTO ..."또는 "INSERT ... ON DUPLICATE KEY UPDATE ..."를 사용하십시오.

+0

그래서 $ result = FALSE이면 게임이 실행되지 않고 오류 메시지가 표시됩니까? 어디에서 오류 메시지가 표시됩니까? 당신은 thehobbit2movie.com에서 내 게임을 볼 수 있습니다 – user671891

+0

데이터베이스 호출이 무엇을 해야하는지에 달려 있습니다. 높은 점수를 등록하지 못하는 것은 성가 시지만 치명적이지는 않습니다. 4 시간 이상의 전투 후에 보스 X를 때려 눕혔다는 기록을 남기지 못하면 아마 집안에 egged/TP가 걸리게 될 것입니다. 오류 처리는 당신에게 달려 있지만, 성공을 가정하면 맹목적으로는 갈 길이 없습니다. –