【问题标题】:Using PHP to insert values in MySQL database from Android app not working?使用 PHP 从 Android 应用程序向 MySQL 数据库中插入值不起作用?
【发布时间】:2016-04-07 03:15:22
【问题描述】:

我正在尝试使用 PHP 将一些值插入 MySQL 数据库。我相当确定我的 android 代码是正确的,但我对 PHP 的了解非常有限。我是不是在做一些明显的错误?

<?

$databasehost = "MyIPAdress:port";
$databasename = "databaseIWant";
$databaseusername = "UserWithPerms";
$databasepassword = "CorrectPassword";

$con = mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error());
mysql_select_db($databasename) or die(mysql_error());

$email = $_POST['email'];
$password = $_POST['password'];
$school = $_POST['school'];

$sql = "INSERT INTO users(username, password, school) VALUES ('$email', '$password', '$school');

$query_exec = mysql_query($sql) or die(mysql_error());
mysql_close();

?>

这里也是安卓代码:(Java)

当用户注册时,此方法被调用:

private void RegisterNewUser(String username, String password) {
        RegisterUserOnNetwork regUser = new RegisterUserOnNetwork();
        regUser.execute(username, password);
    }

class RegisterUserOnNetwork extends AsyncTask<String, String, String> {
    private Exception exception;

protected String doInBackground(String... strings) {
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    nameValuePairs.add(new BasicNameValuePair("email", strings[0]));
    nameValuePairs.add(new BasicNameValuePair("password", strings[1]));

    try {
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new     HttpPost("http://IpAdress/RegisterUser.php");
            httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();

            Log.e("RESULT", EntityUtils.toString(httpEntity) + "l");

            return "Gebruiker suksesvol geskep!";
        } catch (Exception e) {
            e.printStackTrace();
            return "Bediener kon nie bereik word nie.";
        }
    }
}

【问题讨论】:

  • 您是否测试了与数据库的连接?有效吗?
  • 我有另一个 C# 应用程序连接到同一个数据库并且它可以工作(尽管它不使用 PHP)。所以数据库正在工作:)
  • 因为使用 MySQL(第一次)在 Android 客户端和数据库之间建立连接通常很痛苦,所以你真的应该首先担心配置。
  • 我猜想结束 $sql 字符串的缺少的 " 只是一个错字并且在您的 PHP 代码中是正确的?
  • 对不起,您不是有用户名而不是电子邮件吗?所以看起来你试图发布到电子邮件,但你使用的用户名。 "INSERT INTO users(username, password, school) 应该是 "INSERT INTO users(email, password, school)

标签: java php android mysql


【解决方案1】:

没有学校发送到 PHP。 PHP错误也将有助于调试。

【讨论】:

    【解决方案2】:

    您没有发布“学​​校”的数据,您应该在您的 Android 应用中添加另一行代码

     nameValuePairs.add(new BasicNameValuePair("school", YOUR_DATA));
    

    【讨论】:

    • 学校行不小心被我的代码 sn-p 遗漏了,但确实在应用程序的代码中...
    【解决方案3】:

    在 DeafultHttpClient 之前添加这些行

    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
                StrictMode.setThreadPolicy(policy);
    

    为您的清单文件添加互联网权限。

    <uses-permission android:name="android.permission.INTERNET" />
    

    PHP 代码。

    <?php
    $databasehost = "MyIPAdress:port";
    $databasename = "databaseIWant";
    $databaseusername = "UserWithPerms";
    $databasepassword = "CorrectPassword";
    
    $con = mysqli_connect($databasehost, $databaseusername, $databasepassword, $databasename) or die(mysqli_error());
    
    $email = $_POST['email'];
    $password = $_POST['password'];
    $school = $_POST['school'];
    
    $sql = "INSERT INTO users(username, password, school) VALUES ('$email', '$password', '$school')";
    
    $query_exec = mysqli_query($con, $sql) or die(mysql_error());
    mysqli_close();
    ?>
    

    【讨论】:

    • 还缺少右双引号。请注意,$_POST 值的插值极易受到 SQL 注入的攻击。
    猜你喜欢
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 2021-08-04
    • 2017-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多