2013-07-10 145 views
1

嘿我遇到了我的SQL/PHP/JAVA应用程序中的一个小问题我希望你们可以帮助:) 我有一个Java应用程序,当运行连接到我的网站时,Java应用程序验证它正在运行它与我的网站交谈,我的网站将会话Id分配给Java应用程序和网站本身。MySQL插入然后更新表数据

很酷我们到目前为止好吗?

好的我的java应用程序定期发送数据到一个名为Dashboard.php的页面我想要做的是将数据保存到我的Mysql表中,然后当我的Java应用程序从Dashboard.php接收到新数据时, 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)但我有没有运气没有任何人有一个解决方案进行试验?任何帮助,将不胜感激

+1

在你的参数中你有'$ ranged',但你使用'$ range' o n:'$ v4new = $ row ['ranged'] + $ range;' – Timber

+0

哦哇,我没有看到让我改变这一点,并测试出来 –

回答

0

如果这是记录可以被插入到Dashboard表的唯一方法,那么它是不可能的两个记录共享同一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

非常感谢你,我会给这个镜头!并看看它是否有效! –