因为我只能通过一个php脚本使用webhoster的db,所以我想知道我是如何建立到这个脚本的连接的
PHP:
<?php
$query=$_POST["query"];
echo" Query = ".$query."\n";
if($query){
$link=mysql_connect("localhost:3306","user","password");
if($link){
mysql_select_db("learnEng");
$result=mysql_query($query);
if($result){
while($row=mysql_fetch_row($result)){
foreach($row as $value){
echo "\t".$value;
}
echo"\n";
}
}
}else{
echo " MySQL connect failed ! \n";
}
}else{
echo " No Query ! \n";
}
exit();
?>
目前,我正在使用java进行db连接,如下所示(使用h2):
Connection conn = null;
String db = "~/testDB";
String dbUser = "user";
String dbPass = "password";
Class.forName("org.h2.Driver");
conn = DriverManager.getConnection("jdbc:h2:tcp://"+h2IP+"/" + db, dbUser, dbPass);
经过进一步研究,我发现:
HttpURLConnection conn=null;
try{
URL url=new URL("http://www.example.net/database.php");
String agent="Applet";
String query="query=" + "create table test(name varchar(255), id int);";
String type="application/x-www-form-urlencoded";
conn=(HttpURLConnection)url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty( "User-Agent", agent );
conn.setRequestProperty( "Content-Type", type );
conn.setRequestProperty( "Content-Length", ""+query.length());
OutputStream out=conn.getOutputStream();
out.write(query.getBytes());
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
while((inputLine=in.readLine())!=null){
System.out.print(inputLine+"\n");
};
in.close();
int rc = conn.getResponseCode();
System.out.print("Response Code = "+rc+"\n");
String rm=conn.getResponseMessage();
System.out.print("Response Message = "+rm+"\n");
}catch(Exception e){
e.printStackTrace();
}finally{
conn.disconnect();
}
执行之后,我在eclipse控制台中通过上面的php代码得到以下响应:
Query =
No Query !
Response Code = 200
Response Message = OK
有人能告诉我发生了什么事,以及如何让它工作吗?
谨致问候
1条答案
按热度按时间yws3nbqq1#
不久前我也遇到过同样的情况。web宿主不允许直接访问mysql数据库,但允许php脚本。
看看我的隧道。它不是jdbc,而是http(s)将查询作为url编码的“query”参数,并将结果作为json提供。因此,通过适当的粘合代码,您可以使用它来代替普通的jdbc连接。
但在你走这条路之前,一定要了解这种方法所带来的安全问题。你不想让坏人对你的数据有读写权限吧?