【问题标题】:How to insert data into a mysql database form an Android app?如何从 Android 应用程序将数据插入 mysql 数据库?
【发布时间】:2016-02-09 15:20:58
【问题描述】:

我需要将一些从 android 应用检索的数据插入到 mysql 数据库中,并将其插入到一些不同的表中。

我创建了一个用户的注册页面/活动,它可以工作,但我试图从其他活动中插入其他数据,但我无法将它们插入到我的数据库中。

这是我的代码:RegisterUserClass 是用于翻译的类。

RegisterBody.java -> 在这种情况下,我需要将用户 ID 也保存到表中,这就是我保存电子邮件和密码的原因。

private static final String REGISTER_URL = "http://10.0.2.2/sFitness/RegisterBody.php";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register_body);

        etWaist =(EditText) findViewById(R.id.etWaist);
        etHips =(EditText) findViewById(R.id.etHips);
        etBreast =(EditText) findViewById(R.id.etBreast);
        etWrist=(EditText) findViewById(R.id.etWrist);
        etWeight=(EditText)findViewById(R.id.etWeight);
        etHeight=(EditText)findViewById(R.id.etHeight);

        bNext = (Button)findViewById(R.id.bNext);

        bNext.setOnClickListener(this);

        Bundle b= this.getIntent().getExtras();
        array=b.getStringArray(null);
        name=array[0];
        surname=array[1];
        age=array[2];
        email=array[3];
        password=array[4];
    }

    @Override
    public void onClick(View v) {
        switch(v.getId()){
            case R.id.bNext:
                Toast.makeText(getApplicationContext(), "All ok", Toast.LENGTH_LONG).show();
                registerUser();
                break;
        }
    }

    private void registerUser() {
        String waist = etWaist.getText().toString();
        String hips = etHips.getText().toString();
        String breast = etBreast.getText().toString();
        String wrist = etWrist.getText().toString();
        String weight = etWeight.getText().toString();
        String height = etHeight.getText().toString();

        register(waist, hips, breast, wrist, weight, height);
    }

    private void register(String waist, String hips, String breast, String wrist, String weight,String height) {
        class RegisterUser extends AsyncTask<String, Void, String> {

            ProgressDialog loading;
            RegisterUserClass ruc = new RegisterUserClass();

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

                loading = ProgressDialog.show(RegisterBody.this, "Please wait...", null, true, true);
            }

            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                loading.dismiss();
                Toast.makeText(getApplicationContext(), s, Toast.LENGTH_LONG).show();
            }

            @Override
            protected String doInBackground(String... params) {
                HashMap<String, String> data = new HashMap<String, String>();
                data.put("waist", params[0]);
                data.put("hips", params[1]);
                data.put("breast", params[2]);
                data.put("wrist", params[3]);
                data.put("weight", params[4]);
                data.put("height", params[5]);

                String result = ruc.sendPostRequest(REGISTER_URL, data);
                return result;
            }
        }
        RegisterUser ru = new RegisterUser();
        ru.execute(waist,hips,breast,wrist,weight,height, email, password);
        Bundle b=new Bundle();
        b.putStringArray(null, new String[]{name, surname, age, email, password,waist,hips,breast,wrist,weight,height});
        Intent in=new Intent(this,ChooseDiet.class);
        in.putExtras(b);
        startActivity(in);
    }

RegisterBody.php

if($_SERVER['REQUEST_METHOD']=='POST')
{
    $waist = $_POST["waist"];
    $hips = $_POST["hips"];
    $breast = $_POST["breast"];
    $wrist = $_POST["wrist"];
    $weight = $_POST["weight"];
    $height = $_POST["height"];
    $email = $_POST["email"];
    $password = $_POST["password"];


    $conn = mysqli_connect("localhost","root","","sfitness") or die("Error " . mysqli_error($conn));


    $sql="SELECT ID_Person FROM Person WHERE email=".$email." AND password=".$password."";
    $id_person=mysqli_query($conn,$sql);
    if (!$sql)
    {
            echo 'Could not run query: ' . mysql_error();
            exit;
    }
    $id_person = mysql_fetch_row($sql);



    $query ="INSERT INTO Body
                    (Waistline,Hips,Breast,
                     Wrist,Height,ID_person)                  
              values('$waist','$hips','$breast',
                     '$wrist','$weight','$height','$id_peroson')";

    $rows=mysql_query($query,$conn) or die("query fallita");
    mysql_close($conn);

    if($rows>0)
        echo "Registrazione avvenuta correttamente";
    else
        echo "Registrazione fallita";

}

else
{
    echo "Error!!";
}

我没有错误但数据不会保存到表中..为什么?

【问题讨论】:

  • mysql_query != mysqli_query 您不能混合使用 mysqli_ 和 mysql_ 函数调用
  • 那么,我需要使用什么? @RiggsFolly
  • 如果这没有在 php 错误日志中为您提供错误,那么您 只是没有查看
  • 您使用mysqli_connect 连接您的SELECT 使用mysqli_query() 在您的代码中一直使用所有mysqli_ 函数。
  • 请使用 PHP 的built-in functions 来处理密码安全问题。如果您使用的 PHP 版本低于 5.5,则可以使用 password_hash() compatibility pack。

标签: php android mysql


【解决方案1】:

好的,已经格式化了你的 INSERT 查询,这样它就更易读了,这个错误很明显。它们通常是在您使用一些合理的代码格式时出现的。

INSERT 查询提到了 6 列并设置了 7 个参数

您也将$id_person 拼错为$ID_Peroson

$query ="INSERT INTO Body                 
              (Waistline,Hips,Breast,
               Wrist,Height,ID_person) 
         values('$waist','$hips','$breast',
                '$wrist','$weight','$height','$id_person')";

$res = mysqli_query($query,$conn);
if ($res === FALSE ){
    echo mysqli_error($conn);
    exit;
}

将Weight添加到列列表或从参数列表中删除$weight。

附加说明;还要注意@JayBlanchards cmets 关于散列密码和使用准备好的和参数化的查询

$query ="INSERT INTO Body                 
                   (Waistline,Hips,Breast,Wrist,Weight,Height,ID_person) 
             values(?,?,?,?,?,?,?)";

$stmt = mysqli_prepare($query);
if ( $stmt === FALSE ) {
    mysqli_error($conn);
    exit;
}
mysqli_stmt_bind_param('ssssssi', '$waist','$hips','$breast',
                                  '$wrist','$weight','$height','$id_person');

$result = mysqli_stmt_execute($stmt); 
if ( $result === FALSE ){
    echo $mysqli_stmt_error($stmt);
    exit;
}

【讨论】:

  • 完成,但没有记录保存到 db @RiggsFolly
  • 我错过了$ID_Peroson 的拼写错误,应该是$id_person 如果你在每条语句后添加一些错误检查,它会告诉你这一切
  • 不,它不起作用,我不明白为什么@RiggsFolly
  • 您可能需要检查mysqli_stmt_bind_param 的'ssssssi' 部分,因为我不确定您的所有列是什么数据类型
【解决方案2】:

我找到了解决问题的方法。

进入java文件我修改这部分添加:

data.put("email", email);
data.put("password", password);

除了 php 文件我用这个修改我的代码:

$conn = mysql_connect("127.0.0.1","root","") or die("DBMS non disponibile");
mysql_select_db("sfitness") or die("Database non disponibile");

$sql="SELECT * FROM person WHERE Email='$email' AND Password='$password'";

$result=mysql_query($sql,$conn);
if (mysql_num_rows($result)==1){
    $row = mysql_fetch_array($result);
    $id_person=$row['ID_Person'];
}


$query ="INSERT INTO Body (Waistline, Hips, Breast, Wrists, Weight, Height, ID_person) values('$waist','$hips','$breast','$wrist','$weight','$height','$id_person')";

$rows=mysql_query($query,$conn) or die("query fallita");
mysql_close($conn);
if($rows>0)
     echo "Correct registration";
else
     echo "Registration failed";

现在有了这段代码,它可以工作了,谢谢大家

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-17
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 2019-11-18
    • 2013-05-17
    • 2022-12-04
    相关资源
    最近更新 更多