2013-07-10 3 views
1

안녕하세요 필자는 내 SQL/PHP/JAVA 응용 프로그램에서 약간의 문제로 달려 들었다. 너희들이 도울 수 있길 바래다. Java 응용 프로그램을 실행할 때 내 웹 사이트에 연결될 때 Java 응용 프로그램 그것이 내 웹 사이트와 대화를하고 있는지 확인하고 내 웹 사이트는 자바 응용 프로그램과 웹 사이트 자체에 세션 ID를 할당합니다.MySQL 삽입 다음 테이블 데이터를 업데이 트

멋진 지금까지?

괜찮아요. 내 Java 응용 프로그램은 Dashboard.php라는 페이지에 일정한 간격으로 데이터를 전송합니다. My Java 응용 프로그램에서 Dashboard.php가 새 데이터를받은 다음 MyISql 테이블에 데이터를 저장하고 싶습니다. sessionID 방금 수신 한 새로운 데이터로 테이블을 업데이트하고 싶습니다.

여기는 제가 지금까지 가지고있는 PHP입니다.

function update($script_name, $version, $runtime, $status, $ranged, $attack, $defense, $strength, $magic, $sessionID, $username) 
{ 
    global $db; 
    $sql = "SELECT * FROM Dashboard WHERE session_id = '$sessionID'"; 
    try { 
     $results = $db->query($sql); 
     if ($results->rowCount() <= 0) { 
      $query = "INSERT INTO Dashboard (script_name, version, runtime, status, ranged, attack, defense, strength, magic, session_id, username) VALUES ('$script_name', '$version', '$runtime', '$status', '$ranged', '$attack', '$defense', '$strength', '$magic', '$sessionID', $username)"; 
      $db->exec($query); 
     } else { 
      foreach ($results as $row) { 
       $timerunnew = $row['runtime'] + $runtime; 
       $v4new = $row['ranged'] + $range; 
       $v5new = $row['attack'] + $attack; 
       $v6new = $row['defense'] + $defense; 
       $v7new = $row['strength'] + $strength; 
       $v8new = $row['magic'] + $magic; 
      } 
      $db->exec("UPDATE Dashboard SET `runtime` = $timerunnew, `ranged` = $v4new, `attack` = $v5new, `defense` = $v6new, `strength` = $v7new, `magic` = $v8new WHERE session_id = '$sessionID'"); 
     } 
    } catch (PDOException $ex) { 
     echo "fail"; 
    } 
} 

필자 또한 내가 사람이 해결책을 가지고 않습니다 운이 없었습니다 그러나 ON DUPLICATE KEY UPDATE value = VALUES(value) 실험을 시도? 이 기록은 Dashboard 테이블에 삽입 할 수있는 유일한 방법 인 경우 어떤 도움이 많이

+1

귀하의 매개 변수에는'$ ranged'가 있지만'$ range'를 사용하고 있습니다 n :'$ v4new = $ row [ 'ranged'] + $ range;' – Timber

+0

오 와우, 내가 그걸 바꾸고 시험해 보는 걸 본적이 없어. –

답변

0

주시면 감사하겠습니다 두 개의 레코드가 (같은 session_id를 공유 경쟁 위험이 SELECTINSERT 사이에 발생에 대한 저장을 위해, 그것은 불가능하다 명령). 이 경우, 다음을 수행해야합니다

  1. session_id에 정의 된 UNIQUE 키가 있는지 확인하십시오 :

    ALTER TABLE Dashboard ADD UNIQUE KEY (session_id); 
    
  2. 사용 INSERT ... ON DUPLICATE KEY UPDATE가 이상적으로 적절하게 매개 변수화 준비 문 :

    $qry = $db->prepare(' 
        INSERT INTO Dashboard (
        script_name, version, runtime, status, ranged, attack, 
        defense, strength, magic, session_id, username 
    ) VALUES (
        :script_name, :version, :runtime, :status, :ranged, :attack, 
        :defense, :strength, :magic, :session_id, :username 
    ) ON DUPLICATE KEY UPDATE 
        runtime = runtime + VALUES(runtime), 
        attack = attack + VALUES(status), 
        defense = defense + VALUES(defense), 
        strength = strength + VALUES(strength), 
        magic = magic + VALUES(magic) 
    '); 
    
    $qry->execute([ 
        ':script_name' => $script_name, 
        ':version'  => $version, 
        ':runtime'  => $runtime, 
        ':status'  => $status, 
        ':ranged'  => $ranged, 
        ':attack'  => $attack, 
        ':$defense' => $defense, 
        ':strength' => $strength, 
        ':magic'  => $magic, 
        ':session_id' => $sessionID, 
        ':username' => $username 
    ]); 
    
+0

정말 고맙다. 작동하는지 확인하십시오! –

관련 문제