MySQL插入然后更新表数据

时间:2013-07-10 18:31:58

标签: java php mysql

嘿我在我的SQL / PHP / JAVA应用程序中遇到了一个小问题我希望你们能帮忙:) 我有一个java应用程序,当运行时连接到我的网站时,java应用程序验证它正在运行它与我的网站进行通信,我的网站为java应用程序和网站本身分配会话ID。

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

好吧我的java应用程序定期向一个名为Dashboard.php的页面发送数据我想要做的是将数据保存到我的Mysql表中然后当Dashboard.php从我的java应用程序中接收到新数据时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 个答案:

答案 0 :(得分:0)

如果这是记录可以插入Dashboard表的唯一方法,那么两个记录不可能共享相同的session_id(除了在{{之间发生的种族危险) 1}}和SELECT命令)。在这种情况下,你应该:

  1. 确保INSERT上定义了UNIQUE个密钥:

    session_id
  2. 使用INSERT ... ON DUPLICATE KEY UPDATE,理想情况下使用正确参数化的预准备语句:

    ALTER TABLE Dashboard ADD UNIQUE KEY (session_id);