2017-08-09 58 views
1

我有一個來自FIFA足球運動員的數據庫,我可以根據他們的名字從我的Android應用程序中搜索它。我希望能夠根據球員的評分進行搜索,但我無法做到這一點。Android - 如何使用PHP在多個條件下搜索MySQL數據庫?

這是我如何嘗試從我的應用程序發送兩個標準(玩家名稱和評級),這是它不起作用的地方。如果我只有一個Uri.builder()searchQuery變量(這是玩家的名字),它就可以工作。但是當我嘗試添加另一個Uri.builder()與變量minRating它不能連接到數據庫。

// 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 to true as we send and recieve data 
      conn.setDoInput(true); 
      conn.setDoOutput(true); 

      // add parameter to our above url 
      Uri.Builder builder = new Uri.Builder().appendQueryParameter("searchQuery", searchQuery); 
      String query = builder.build().getEncodedQuery(); 

      Uri.Builder builder2 = new Uri.Builder().appendQueryParameter("minRating", minRating); 
      String minRating = builder2.build().getEncodedQuery(); 

      OutputStream os = conn.getOutputStream(); 
      BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8")); 
      writer.write(query); 
      writer.write(minRating); 
      writer.flush(); 
      writer.close(); 
      os.close(); 
      conn.connect(); 

這是我收到的數據與我的PHP文件和查詢數據庫:

<?php 
include 'config.inc.php'; 

if(isset($_POST['searchQuery'])) 
{ 
     $search_query=$_POST['searchQuery']; 
     $min_rating=$_POST['minRating']; 

     $sql = "SELECT Name, Club_Position, Rating from spillere where Name LIKE '%$search_query%' 
       AND Rating > $min_rating"; 

     $statement = $conn->prepare($sql); 
    $statement->bindParam(':search_query',$search_query, PDO::PARAM_STR); 
     $statement->execute(); 
     if($statement->rowCount()) 
     { 
    $row_all = $statement->fetchall(PDO::FETCH_ASSOC); 
    header('Content-type: application/json'); 
    echo json_encode($row_all); 
     } 
     elseif(!$statement->rowCount()) 
     { 
    echo "no rows"; 
     } 
}  
?> 

這是我的堆棧跟蹤的樣子:

Image of stacktrace

如何我可以從我的Android應用程序獲取兩個或更多搜索條件,將它發送到PHP文件並查詢數據庫?

+0

但你已經派出兩個參數'searchQuery'和'minRating'。您可以執行相同的操作來發送更多參數。或者你想要什麼? – Edwin

+1

@Edwin對不起,沒有說清楚。我無法發送只能發送的兩個參數('searchQuery')。當我嘗試發送('minRating')時,它不起作用。所以我使用('Uri.builder')的方式肯定有問題。 – Sumsar9000

回答

1
Uri.Builder builder = new Uri.Builder().appendQueryParameter("searchQuery", searchQuery); 
String query = builder.build().getEncodedQuery(); 

Uri.Builder builder2 = new Uri.Builder().appendQueryParameter("minRating", minRating); 
String minRating = builder2.build().getEncodedQuery(); 

單查詢參數結合上述兩種參數:

Uri.Builder builder = new Uri.Builder() 
      .appendQueryParameter("searchQuery", searchQuery) 
      .appendQueryParameter("minRating", minRating); 
String query = builder.build().getEncodedQuery(); 

//Now write query param to OutputStream 
OutputStream os = conn.getOutputStream(); 
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8")); 
writer.write(query); 
+0

謝謝!簡單的解決惱人的問題:) – Sumsar9000