嘿我在我的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)
,但是我没有运气,有人有解决方案吗?任何帮助将不胜感激
答案 0 :(得分:0)
如果这是记录可以插入Dashboard
表的唯一方法,那么两个记录不可能共享相同的session_id
(除了在{{之间发生的种族危险) 1}}和SELECT
命令)。在这种情况下,你应该:
确保INSERT
上定义了UNIQUE
个密钥:
session_id
使用INSERT ... ON DUPLICATE KEY UPDATE
,理想情况下使用正确参数化的预准备语句:
ALTER TABLE Dashboard ADD UNIQUE KEY (session_id);