【发布时间】:2014-01-08 21:56:00
【问题描述】:
我正在尝试在 java 中更新一个 sql 数据库,但它只适用于导航器。我正在为此使用 GET 请求,因为主机不允许我激活 sql 远程访问。
这是java函数:
public static void insertScore(String user, boolean win){
URL url;
HttpURLConnection connection=null;
try {
url = new URL("http://mypage/insert.php?user="+user+"&win="+win);
connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("GET");
connection.connect();
} catch (MalformedURLException ex) {
Logger.getLogger(SQL.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(SQL.class.getName()).log(Level.SEVERE, null, ex);
}
}
还有insert.php文件,这个文件还可以,不过如果对你有帮助的话:
<?php
if($_GET["win"]=='true'){
$sql="UPDATE Score SET `Win` = `Win` +1 WHERE `User` = '".$_GET['user']."'";
}
else{
$sql="UPDATE Score SET `Lose` = `Lose` +1 WHERE `User` = '".$_GET['user']."'";
}
$link = mysqli_connect('myhost','myuser','mypassword','mydb'); //everything ok here
if (!$link) {
die('Error: ' . mysql_error());
}
$result=$link->query($sql);
?>
当我将链接粘贴到 safari http://mypage/insert.php?user=Steve&win=true 中时,Sql 数据库会正确更新,但我不知道如何使用 Java 执行此操作,它不会更新数据库中的任何内容...
【问题讨论】:
-
请,在您编写任何更多 SQL 接口代码之前,您必须阅读 proper SQL escaping 以避免严重的 SQL injection bugs。使用
mysqli时,您应该使用参数化查询和bind_param将用户数据添加到您的查询中。 避免使用字符串插值来完成此操作。 -
(另外,即使转义是固定的,这个系统非常容易作弊,它违反了 GET 幂等的规则。我建议看看现有的 RPC/WebAPI框架[有一个 Java 客户端和 PHP 提供程序]。)