不能使用WAMP本地服务器的Android应用程序连接到MySQL数据库

问题描述:

我试图创建一个简单的登录到我的Android应用程序,输入来自用户从以下这些教程数据库进行比较数据:不能使用WAMP本地服务器的Android应用程序连接到MySQL数据库

我使用WAMP作为本地服务器只是为了测试,如果我可以让连接

。 我有两个PHP,文件名为的config.inc.phplogin.inc.php放在以下目录:C:\ wamp64 \ WWW \ DUFT,他们看起来是这样的:

配置.inc.php

<?php $servername = "localhost:80"; 
    $username = "root"; 
    $password = "root"; 
    $dbname = "duft"; 

    try { 
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} 
catch(PDOException $e) 
{ 
    die("OOPs something went wrong"); 
} 

?> 

login.inc.php

<?php 

include 'config.inc.php'; 

// Check whether username or password is set from android 
if(isset($_POST['username']) && isset($_POST['password'])) 
{ 
     // Innitialize Variable 
     $result=''; 
     $username = $_POST['username']; 
     $password = $_POST['password']; 

     // Query database for row exist or not 
     $sql = 'SELECT * FROM tbl_login WHERE email = :username AND adgangskode = :password'; 
     $stmt = $conn->prepare($sql); 
     $stmt->bindParam(':username', $username, PDO::PARAM_STR); 
     $stmt->bindParam(':password', $password, PDO::PARAM_STR); 
     $stmt->execute(); 
     if($stmt->rowCount()) 
     { 
     $result="true";  
     } 
     elseif(!$stmt->rowCount()) 
     { 
      $result="false"; 
     } 

     // send result back to android 
     echo $result; 
}?> 

然后,我有我使用的AsyncTask马在我的LoginActivity类在后台连接到数据库。在onPostExecute()方法中,如果用户输入与数据库中的内容匹配,我试图启动一个新的活动。但我一直从PHP-文件收到此错误:


警告(!): PDO :: __结构():\ wamp64 \ WWW \ DUFT \登录:MySQL服务器在 C已消失。 inc.php on line 调用堆栈#TimeMemoryFunctionLocation10.0042244400 {main}()... \ login.inc.php 020.0043245592http://www.php.net/PDO.construct'target ='_ new ')__ construct( )... \ login.inc.php 10(!)警告: PDO :: __ construct():读取问候数据包时出错。调用堆栈#TimeMemoryFunctionLocation10.0042244400 {main}()... \ login.inc.php 020.0043245592http://www.microsoft.com/downloads/details.asp?url=/library/default.mspx //www.php.net/PDO.construct”目标= '_新'> __构造( )... \ login.inc.php 10OOPs 出事了

这是我的logcat说:

Logcat

我LoginActivity Java类看起来是这样的:

public class LoginActivity extends AppCompatActivity{ 

//NYT 
// CONNECTION_TIMEOUT and READ_TIMEOUT are in milliseconds 

public static final int CONNECTION_TIMEOUT=2000000000; 
public static final int READ_TIMEOUT=2000000000; 
private EditText etEmail; 
private EditText etPassword; 
//NYT 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login); 

    //NYT 
    // Get Reference to variables 
    etEmail = (EditText) findViewById(R.id.eMail); 
    etPassword = (EditText) findViewById(R.id.password); 
    //NYT 


    TextView klikHer = (TextView) findViewById(R.id.klikHer); 
    klikHer.setPaintFlags(klikHer.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG); 

    Button login = (Button) findViewById(R.id.signIn); 
    login.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      //Intent intent = new Intent(LoginActivity.this, MenuScreen.class); 
      //startActivity(intent); 

      //NYT 
      // Get text from email and passord field 
      final String email = etEmail.getText().toString(); 
      final String password = etPassword.getText().toString(); 

      // Initialize AsyncLogin() class with email and password 
      new AsyncLogin().execute(email, password); 
      //NYT 
     } 
    }); 
} 


private class AsyncLogin extends AsyncTask<String, String, String> { 
    ProgressDialog pdLoading = new ProgressDialog(LoginActivity.this); 
    HttpURLConnection conn; 
    URL url = null; 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

     //this method will be running on UI thread 
     pdLoading.setMessage("\tLoading..."); 
     pdLoading.setCancelable(false); 
     pdLoading.show(); 

    } 

    @Override 
    protected String doInBackground(String... params) { 
     try { 

      // Enter URL address where your php file resides 
      url = new URL("http://192.168.87.100/DUFT/login.inc.php"); 

     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      return "exception"; 
     } 
     try { 
      // Setup HttpURLConnection class to send and receive data from php and mysql 
      conn = (HttpURLConnection) url.openConnection(); 
      //conn.setReadTimeout(READ_TIMEOUT); 
      //conn.setConnectTimeout(CONNECTION_TIMEOUT); 
      conn.setRequestMethod("POST"); 

      // setDoInput and setDoOutput method depict handling of both send and receive 
      conn.setDoInput(true); 
      conn.setDoOutput(true); 

      // Append parameters to URL 
      Uri.Builder builder = new Uri.Builder() 
        .appendQueryParameter("username", params[0]) 
        .appendQueryParameter("password", params[1]); 
      String query = builder.build().getEncodedQuery(); 

      // Open connection for sending data 
      OutputStream os = conn.getOutputStream(); 
      BufferedWriter writer = new BufferedWriter(
        new OutputStreamWriter(os, "UTF-8")); 
      writer.write(query); 
      writer.flush(); 
      writer.close(); 
      os.close(); 
      conn.connect(); 

     } catch (IOException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
      return "exception"; 
     } 

     try { 

      int response_code = conn.getResponseCode(); 

      // Check if successful connection made 
      if (response_code == HttpURLConnection.HTTP_OK) { 

       // Read data sent from server 
       InputStream input = conn.getInputStream(); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(input)); 
       StringBuilder result = new StringBuilder(); 
       String line; 

       while ((line = reader.readLine()) != null) { 
        result.append(line); 
       } 

       // Pass data to onPostExecute method 
       return (result.toString()); 

      } else { 

       return ("unsuccessful"); 
      } 

     } catch (IOException e) { 
      e.printStackTrace(); 
      return "exception"; 
     } finally { 
      conn.disconnect(); 
     } 


    } 

    @Override 
    protected void onPostExecute(String result) { 

     //this method will be running on UI thread 

     pdLoading.dismiss(); 

     if (result.equalsIgnoreCase("true")) { 
      /* Here launching another activity when login successful. If you persist login state 
      use sharedPreferences of Android. and logout button to clear sharedPreferences. 
      */ 

      Intent intent = new Intent(LoginActivity.this, MenuScreen.class); 
      startActivity(intent); 
      LoginActivity.this.finish(); 

     } else if (result.equalsIgnoreCase("false")) { 

      // If username and password does not match display a error message 
      //Toast.makeText(LoginActivity.this, "Invalid email or password", Toast.LENGTH_LONG).Show(); 


     } else if (result.equalsIgnoreCase("exception") || result.equalsIgnoreCase("unsuccessful")) { 

      //Toast.makeText(LoginActivity.this, "OOPs! Something went wrong. Connection Problem.", Toast.LENGTH_LONG).Show(); 

     } 
    } 
}} 

我已按照教程中的所有步骤,我能够通过输入IPv4地址到我的手机浏览器与我的手机来访问本地服务器。这意味着我也能够访问本地服务器上的数据库,对吧?

+0

确实允许连接在您的httpd配置文件 –

+0

尝试删除主机端口:80 config.php .. – Omi

+0

@OussemaAroua你能告诉我更具体的如何允许连接吗? – Sumsar9000

我找到了解决方案!问题出在这行代码中

php $servername = "localhost:80"; 

在这里我定义了Apache的端口,而不是MySQL的3307端口。所以我只是将它改为3307的正确端口:)

感谢您的帮助!

+0

1)将端口号':3307'关闭,它将采用php.ini中设置的默认值2)MySQL通常在端口3306上运行 – RiggsFolly

+0

端口3307用于适用于MariaDB的WAMPServer 3.0.7及更高版本 – RiggsFolly