java通过php脚本连接到mysql

iklwldmw  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(288)

因为我只能通过一个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

有人能告诉我发生了什么事,以及如何让它工作吗?
谨致问候

yws3nbqq

yws3nbqq1#

不久前我也遇到过同样的情况。web宿主不允许直接访问mysql数据库,但允许php脚本。
看看我的隧道。它不是jdbc,而是http(s)将查询作为url编码的“query”参数,并将结果作为json提供。因此,通过适当的粘合代码,您可以使用它来代替普通的jdbc连接。
但在你走这条路之前,一定要了解这种方法所带来的安全问题。你不想让坏人对你的数据有读写权限吧?

相关问题