2014-09-22 3 views
-1

Я пытаюсь вставить objetc в таблицу на моей базе данных, используя следующий код:Android MYSQL Вставка не работает

PHP:

$sql = mysql_query("INSERT INTO order (placer_name, item_name, payment_amount, location_string, location_lat, location_long) VALUES('$_POST[PlacerName]', '$_POST[ItemName]', '$_POST[Payment]', '$_POST[Location]', '$_POST[Lat]', '$_POST[Long]')");  

     if($sql){ 
      echo 'Success'; 
     } 
     else{ 
      echo 'Error occured.'; 
     } 
} 

JAVA:

// POST ORDER 
    public void order(String nm, String pay, String location) { 
     itemName = nm; 
     paymentAmount = pay; 
     locationString = location; 
     if (Utility.getCurrentLocation() != null) { 
      handler.post(new Runnable() { 
       public void run() { 
        new OrderTask().execute((Void) null); 
       } 
      }); 
     } else { 
      // Cannot Determine Location 
      showMessage("Cannot Determine Location."); 
     } 
    } 

    class OrderTask extends AsyncTask<Void, Void, Boolean> { 
     private void postData() { 
      if (user.loggedIn) { 
       HttpClient httpclient = new DefaultHttpClient(); 
       HttpPost httppost = new HttpPost(
         "http://cyberkomm.ch/sidney/php/postOrder.php"); 
       try { 
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
          6); 
        nameValuePairs.add(new BasicNameValuePair("PlacerName", 
          user.userName)); 
        nameValuePairs.add(new BasicNameValuePair("ItemName", 
          itemName)); 
        nameValuePairs.add(new BasicNameValuePair("Payment", 
          paymentAmount)); 
        nameValuePairs.add(new BasicNameValuePair("Location", 
          locationString)); 
        nameValuePairs.add(new BasicNameValuePair("Long", String 
          .valueOf(user.longitude))); 
        nameValuePairs.add(new BasicNameValuePair("Lat", String 
          .valueOf(user.latitude))); 
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
        HttpResponse response = httpclient.execute(httppost); 
        BufferedReader in = new BufferedReader(
          new InputStreamReader(response.getEntity() 
            .getContent())); 
        StringBuffer sb = new StringBuffer(""); 
        String line = ""; 
        while ((line = in.readLine()) != null) { 
         sb.append(line); 
         break; 
        } 
        in.close(); 
        responseString = sb.toString(); 
        if (responseString.equals("Success")) { 
         // Order Placed 
         showMessage("Success. Order Placed!"); 
         user.onPlaced(); 
        } else { 
         // Failed 
         showMessage("Failed. " + responseString); 
        } 
       } catch (Exception e) { 
        Log.e("log_tag", "Error: " + e.toString()); 
       } 
      } else {`enter code here` 
       // Must Login 
       showMessage("Must Login"); 
      } 
     } 

     @Override 
     protected Boolean doInBackground(Void... params) { 
      postData(); 
      return null; 
     } 
    } 

БАЗЫ ДАННЫХ: enter image description here

Когда я запускаю код, sql всегда возвращает «ошибка», что означает, что он не может выполнить запрос:

"INSERT INTO order (placer_name, item_name, payment_amount, location_string, location_lat, location_long) VALUES('$_POST[PlacerName]', '$_POST[ItemName]', '$_POST[Payment]', '$_POST[Location]', '$_POST[Lat]', '$_POST[Long]')" 

я проверил синтаксис, и кажется, что все в порядке, но у меня были некоторые предположения относительно того, что может быть неправильно, но я я не уверен:

Тип проблема с целыми числами, удваивает значения параметров

Спасибо за вашу помощь.

ответ

4

order является зарезервированным словом MySQL.

http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html

или обернуть его в обратных кавычках, или использовать другое слово, например orders, что было бы хорошо.

с сообщением об ошибке, сигнализировал бы об этом.

error_reporting(E_ALL); 
ini_set('display_errors', 1); 

http://php.net/manual/en/function.error-reporting.php

сообщение об ошибке SQL бы:

У Вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, которое соответствует версии сервера MySQL для корректного синтаксиса использовать вблизи «порядка


Plus, ваш настоящий код открыт для SQL injection. Используйте mysqli with prepared statements, или PDO with prepared statements.

+0

@TastyLemons Вы очень желанны. –

Смежные вопросы