Android响应代码200从php mysql,但没有在数据库中的条目


Android response code 200 from php mysql but does not make entries in database

我正在发送数据从我的android应用程序表单到php mysql服务器和从服务器我得到响应代码200,但未能使任何条目进入数据库。

这是我的php文件,我发送POST变量

    <?php
$host='localhost';
$uname='root';
$pass='pass';
$db='App';

$con=mysqli_connect($host,$uname,$pass,$db);

$First_Name=$_POST['First_Name'];
$Last_Name=$_POST['Last_Name'];
$Phone=$_POST['Phone'];
$Mail_ID=$_POST['Mail_ID'];
$Password =$_POST['Password'];
$La=$_POST['La'];
$Lo=$_POST['Lo'];
$Ac=$_POST['Ac'];
$Pro=$_POST['Pro'];
if($con){
 echo "Connected Successfully to database $First_Name "; //Print Variable to Check that file is getting inputs.Its Working.
}
else{
echo 'Failed To Connect to database ';
}

$sql="INSERT INTO `mobile_App`(`First_Name`, `Last_Name`, `Phone`, `Mail_ID`, `Password`, `La`, `Lo`, `Ac`, `Pro`)
VALUES ($First_Name,$Last_Name,$Phone,$Mail_ID,$Password,$La,$Lo,$Ac,$Pro)";
if(mysqli_query($con,$sql)){
echo 'Data Inserted Successfully';
}
else{
echo "ERROR: could not able to execute $sql.".
mysqli_error($con) ;
}
mysqli_close($con);
?>

这是我的Java文件

    public class Sending_Data_To_Server extends AsyncTask{
String Lo,La,Ac,Pro,First_Name,Last_Name,Phone,Mail_ID,Password;
BufferedReader reader;
@Override
protected String doInBackground(String... params) {
    //Variables
    First_Name=params[0];
    Last_Name=params[1];
    Phone=params[2];
    Mail_ID=params[3];
    Password=params[4];
    Lo=params[5];
    La=params[6];
    Ac=params[7];
    Pro=params[8];
    Log.d("SEND DATA VALUES",First_Name+Last_Name+Lo+La+Phone);

    try {
        String data= URLEncoder.encode("First_Name","UTF-8")+ "=" +URLEncoder.encode(First_Name,"UTF-8");
        data+= "&" +URLEncoder.encode("Last_Name","UTF-8")+ "=" +URLEncoder.encode(Last_Name,"UTF-8");
        data+= "&" + URLEncoder.encode("Phone","UTF-8")+ "=" +URLEncoder.encode(Phone,"UTF-8");
        data+= "&" + URLEncoder.encode("Mail_ID","UTF-8")+ "=" +URLEncoder.encode(Mail_ID,"UTF-8");
        data+= "&" + URLEncoder.encode("Password","UTF-8")+ "=" +URLEncoder.encode(Password,"UTF-8");
        data+= "&" + URLEncoder.encode("La","UTF-8")+ "=" +URLEncoder.encode(La,"UTF-8");
        data+= "&" + URLEncoder.encode("Lo","UTF-8")+ "=" +URLEncoder.encode(Lo,"UTF-8");
        data+= "&" + URLEncoder.encode("Ac","UTF-8")+ "=" +URLEncoder.encode(Ac,"UTF-8");
        data+= "&" + URLEncoder.encode("Pro","UTF-8")+ "=" +URLEncoder.encode(Pro,"UTF-8");

        URL url=new URL("test/Android/Data/data.php");   // can't post complete url due to restriction to new users 
        HttpURLConnection connection= (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("POST");
        connection.setDoInput(true);
        connection.setDoOutput(true);
        //For POST Only - Begin
        connection.setDoOutput(true);
        OutputStream os=connection.getOutputStream();
        BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(os,"UTF-8"));
        writer.write(data);
        writer.flush();
        writer.close();
        os.close();
        connection.connect();
        //For POST Only End
        int responseCode=connection.getResponseCode();
        Log.d("Sending Class----","POST RESPONSE CODE "+responseCode);
        if (responseCode==HttpURLConnection.HTTP_OK){
            //Success
            reader=new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String inputLine;
            StringBuffer response=new StringBuffer();
            while((inputLine=reader.readLine())!=null){
                response.append(inputLine);
            }
            reader.close();
            //Print Result
            Log.d("SENDING CLASS----",response.toString());
        }
        else{
            Log.d("SENDING CLASS---","POST did not work");
        }

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return "DATA SUBMITTED";
}
}

这里是Logcat

    06-29 20:48:52.703 7211-7211/com.boysjoys.com.pro_working1 D/REGISTRATION CLASS: ----ALL DATA READY AND CAPTURED
06-29 20:48:52.723 7211-29559/com.boysjoys.com.pro_working1 D/SEND DATA VALUES: helloworld28.531212977.25688999865321472
06-29 20:48:52.893 7211-7211/com.boysjoys.com.pro_working1 W/FragmentManager: moveToState: Fragment state for AppIntroFragment{423d9470 #1 id=0x7f0e009f android:switcher:2131624095:1} not updated inline; expected state 3 found 2
06-29 20:48:52.933 7211-7211/com.boysjoys.com.pro_working1 D/AppIntroBaseFragment: Slide Hello World has been selected.
06-29 20:48:53.423 7211-29559/com.boysjoys.com.pro_working1 D/Sending Class----: POST RESPONSE CODE 200
06-29 20:48:53.423 7211-29559/com.boysjoys.com.pro_working1 D/SENDING CLASS----: Connected Successfully to database hello ERROR: could not able to execute INSERT INTO `mobile_App`(`First_Name`, `Last_Name`, `Phone`, `Mail_ID`, `Password`, `La`, `Lo`, `Ac`, `Pro`)VALUES (hello,world,9810012345,Google@gmail.com,adffgghhjjk,77.2568899,28.5312129,37.5,Fixed).You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@gmail.com,adffgghhjjk,77.2568899,28.5312129,37.5,fused)' at line 2

和我的数据库结构我想插入app data

的行

到目前为止,我已经尝试了这么多的教程和指南,大多数地方我已经看到HttpClient贬值,所以我只使用HttpUrlConnection和服务器返回状态码200,我认为这是php mysql文件中的一些错误,但不确定。

正如@Adam Forbis建议的那样,打印mysql错误并检查php文件获取的值。所以我做了,我编辑我的PHP文件,以获得这些细节,现在我正在更新logcat mysql错误

也许可以尝试在你的php文件(取代你的$sql var这个):

$sql="
    INSERT INTO `mobile_App`
    (
        `First_Name`,
        `Last_Name`,
        `Phone`,
        `Mail_ID`,
        `Password`,
        `La`,
        `Lo`,
        `Ac`,
        `Pro`
    )
    VALUES (
        '".$First_Name."',
        '".$Last_Name."',
        $Phone,
        '".$Mail_ID."',
        '".$Password."',
        $La,
        $Lo,
        $Ac,
        '".$Pro."'
    )
;";

这也是f_anto的相同答案,但我确认您必须在字符串周围使用单引号。(我只喜欢写"$var"。"' $var')

这对我来说是完美的(类似的代码)测试你的问题:

<?php

$db = mysqli_connect("host", "userLogin", "userPwd", "dbName");
$id = 999;
$idc = 1;
$idd = 0;
$p = "gpog@email.com";
$la = 15478.12;
$l = 0;
$sql="
        INSERT INTO `table`
        (
            `field1`,
            `field2`,
            `field3`,
            `field4`,
            `field5`,
            `field6`
        )
        VALUES (
            $id,
            $idc,
            $idd,
            '".$p."',
            $la,
            $l
        )
    ;";
mysqli_query($db, $sql);
var_dump(mysqli_error($db));

对于插入查询的值,您应该这样做(在每个值中添加引号)

$sql="INSERT INTO mobile_App(First_Name,Last_Name,Phone,Mail_ID,Password,La,Lo,Ac,Pro)
VALUES ('$First_Name','$Last_Name','$Phone','$Mail_ID','$Password','$La','$Lo','$Ac','$Pro')";

使用此异步任务来调用php api。

public static class backgroundTask extends AsyncTask<String, String, String[]> {
    @Override
    protected void onPreExecute() {
        //do something before putting values in database 
    }
    @Override
    protected String[] doInBackground(String... f_url) {
        //call php api here with the arguments
        String url = "YOUR_PHP_API_URL_WITH_ARGUMENTS";
        HttpClient client = new DefaultHttpClient();
        try {
            client.execute(new HttpGet(url));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return f_url;
    }
    @Override
    protected void onPostExecute(String[] f_url) {
        //do something after putting values in database
    }
}

同时,修改你的php api。做成这样。我去掉了单引号。

    $sql="INSERT INTO mobile_App(First_Name,Last_Name,Phone,Mail_ID,Password,La,Lo,Ac,Pro)
VALUES ($First_Name,$Last_Name,$Phone,$Mail_ID,$Password,$La,$Lo,$Ac,$Pro)";