2017-01-30 5 views
0

私は、mysqlサーバに接続してクエリを作成できる非常に基本的なアンドロイドアプリケーションを作ろうとしています。私はホスト、ユーザー、名前とパスワードが必要な最初のページを作った。次に、これらの入力をPOSTメソッドを使用してphpスクリプト(conn.php)に渡します。 mysql接続が確立されている場合は、「成功」を示すポップアップが表示され、それ以外の場合はエラーが表示されます。今、私はここで立ち往生しています。今私はホスト、ユーザー名とパスワードを提供し、接続を確立した後、接続上でクエリを行う別のPHPスクリプトで同じ接続を使用したい。SQL接続を別のPHPに渡す方法

は、ここに私のconn.php

<?php 
    $host=$_POST["host"]; 
    $user=$_POST["user"]; 
    $pass=$_POST["pass"]; 
    $sql=new mysqli($host,$user,$pass); 
    if($sql->connect_error) 
     echo "Failed: ".$sql->connect_error; 
    else{ 
     echo "Success"; 
    } 
?> 

は、ここで私はそれが間違ってやっている場合は、何が別の方法かもしれない私のAndroidのタスク

class ConnectSqlDb extends AsyncTask<String, Void, String> { 
     ProgressDialog waitDialog; 
     @Override 
     protected void onPreExecute() { 
      waitDialog=ProgressDialog.show(MainActivity.this,"Connecting to MySQLServer","Please wait...",true,false); 
     } 

     @Override 
     protected String doInBackground(String... params) { 
      URL url=null; 
      HttpURLConnection connection=null; 
      OutputStream os; 
      BufferedWriter writer; 
      StringBuilder parameter=new StringBuilder(); 
      try { 
       parameter.append(URLEncoder.encode("host", "UTF-8")); 
       parameter.append("="); 
       parameter.append(URLEncoder.encode(params[1], "UTF-8")); 
       parameter.append("&"); 

       parameter.append(URLEncoder.encode("user", "UTF-8")); 
       parameter.append("="); 
       parameter.append(URLEncoder.encode(params[2], "UTF-8")); 
       parameter.append("&"); 

       parameter.append(URLEncoder.encode("pass", "UTF-8")); 
       parameter.append("="); 
       parameter.append(URLEncoder.encode(params[3], "UTF-8")); 
      }catch (UnsupportedEncodingException e) { 
       e.printStackTrace(); 
      } 
      try { 
       url = new URL(params[0]); 
       connection = (HttpURLConnection)url.openConnection(); 
       connection.setRequestMethod("POST"); 
       connection.setDoOutput(true); 
       os=connection.getOutputStream(); 
       writer=new BufferedWriter(new OutputStreamWriter(os,"UTF-8")); 
       writer.write(parameter.toString()); 
       writer.flush(); 
       writer.close(); 

       BufferedReader br=new BufferedReader(new InputStreamReader(connection.getInputStream())); 
       String message=br.readLine(); 
       br.close(); 
       return message; 
      }catch (MalformedURLException e){ 
       e.printStackTrace(); 
       return null; 
      } 
      catch (IOException e){ 
       e.printStackTrace(); 
       return null; 
      } 
     } 

     @Override 
     protected void onPostExecute(String message) { 
      waitDialog.dismiss(); 
      Toast.makeText(MainActivity.this,message,Toast.LENGTH_SHORT).show(); 

     } 
    } 
public void connect(View v){ 
     String server=phpserver.getText().toString(); 
     String hostname=host.getText().toString(); 
     String username=user.getText().toString(); 
     String password=pass.getText().toString(); 
     new ConnectSqlDb().execute(server,hostname,username,password); 

    } 

だのですか?

+0

ような何かを、あなたが唯一のDB接続を持っていることを確認したいのですか?私はあなたが複数のPHPと複数のクエリを実行している間に確立する1つの接続を確認したいのですか? – webDev

+0

まあまあです。一度確立されると、その1つの接続だけを使用したいと思います。 – Ruman

答えて

0

だから、接続が1つだけの場合は、シングルトンクラス(シングルトンパターンを参照)を使用してください。 次のようにDBConnection.php
、接続クラスを定義

class DBConnection{ 
    protected static $db; 
    private function __construct() { 
     try { 
      $host:"myhost"; 
      $user:"myuser"; 
      $pass:"mypass"; 
      self::$db = $sql=new mysqli($host,$user,$pass); 
     } 
     catch (Exception $e) { 
      //.......... 
     } 
    } 
    public static function getInstance() { 
     if (!self::$db) { 
      new DBConnection(); 
     } 
     return self::$db; 
    } 

    public function __destruct() { 
     $db=NULL; 
    } 
} 

注:では、このクラスのオブジェクトを作成し、対象を作成中に、このクラスにPOSTから取得し、あなたの値を渡すPHPこのクラス。あなたのPHPファイルで は
conn.php

include "DBConnection.php"; 
//$host=$_POST["host"]; 
//$user=$_POST["user"]; 
//$pass=$_POST["pass"]; 
//$db = new DBConnection($host,$user,$pass); 
$db = new DBConnection(); 
$connection = $db->getInstance(); 
+0

私はこの接続を別のPHPファイルで利用できるようにしたいので、クエリを作成できます。接続が確立されると、$ host、$ user、$ passという変数は必要ありません。データベースのリストを表示するとしたら、後でテーブルを作成して使用するとしましょう。どうすればそれを達成できますか? – Ruman

+0

OK、あなたはちょうどそれらの変数をPHP側で静的にすることができますお待ちしております。私はコード – webDev

+0

今すぐクラスで参照してください、接続資格情報は静的です、今あなたは、このクラスから任意のPHPファイルとリストのDBに接続インスタンスを取得するこの同じコードを使用することができます。資格をクラスメンバー変数として定義し、$ thisキーワードを使用して使用することができます。 – webDev

関連する問題