通过 PHP - WAMP 服务器将数据插入 MySQLi

Insert data into MySQLi via PHP - WAMP server

我有一个 wamp 服务器设置。它完美地工作:) 然后我进入 phpMyAdmin 并创建了一个 table。使用我制作的 android 应用程序,我想在我的数据库中插入一条记录。 android (java) 代码是正确的,我对此有 100% 的把握。但是,当我创建记录时,它不起作用。

因为我不太了解PHP所以我认为我的错误在于Register.php

这是文件: 如果能深入了解我的问题是什么,那就太棒了!

请注意,我在真实文件中使用了正确的 public ip。我刚刚为下面的代码输入了一个随机的。另外,我创建了一个具有所需权限的用户(代替用户名和密码)。数据库 "database" 也确实存在。

Register.php

$con = mysqli_connect("http://148.12.0.153:3306","username","password", "database");

$username = $_POST["username"];
$email = $_POST["email"];
$password = $_POST["password"];
$phone = $_POST["phone"];
$balance = $_POST["balance"];
$NameAndSurname = $_POST["NameAndSurname"];
$DateOfBirth = $_POST["DateOfBirth"];
$SchoolName = $_POST["SchoolName"];
$Gender = $_POST["Gender"];
$Grade = $_POST["Grade"];
$Class = $_POST["Class"];
$Country = $_POST["Country"];
$Province = $_POST["Province"];
$Address = $_POST["Address"];
$City = $_POST["City"];
$PostalCode = $_POST["PostalCode"];

$statement = mysqli_prepare($con, "INSERT INTO users (username, email, password, phone, balance, NameAndSurname, DateOfBirth, SchoolName, Gender, Grade, Class, Country, Province, Address, City, PostalCode) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
mysqli_stmt_bind_param($statement, "ssssisssiisssssi", $username, $email, $password, $phone, $balance, $NameAndSurname, $DateOfBirth, $SchoolName, $Gender, $Grade, $Class, $Country, $Province, $Address, $City, $PostalCode);
mysqli_stmt_execute($statement);

mysqli_stmt_close($statement);

mysqli_close($con);

将 mysqli_stmt_close 更改为

mysqli_stmt_close($statement) or die(mysqli_error());

这将为您提供更准确的错误信息,说明失败的原因。

好的,这里有很多事情要提。

首先,您使用 android 应用程序在您的 Apache 服务器上启动这个 Register.php 脚本,就像它是一个网页一样,所以这个脚本 运行ning 在服务器,而不是您的 phone 或平板电脑。因此 Apache 和 MySQL 以及脚本都在 WAMPServer PC 上 运行ning。所以你的连接字符串不需要一些真实的IP地址,它可以使用并且应该使用像localhost127.0.0.1

这样的东西

接下来,您的数据库访问代码假设一切都会正确发生,但情况可能并非如此,请参见上一段。因此,请始终检查状态代码并将状态报告回调用程序,以便它可以就下一步做什么做出明智的决定。将错误记录到 PHP 错误日志也是一个好主意,因此当它上线时,您可以检查日志并查看是否有任何问题,而无需 运行 phone 应用程序。

所以试试这些改变:

// init the reply class
$result = new stdClass();
$result->status = 'OK';  


$con = mysqli_connect("127.0.0.1","username","password", "database");
if ( ! $con ) {
    $result->status        = 'ERROR';
    $result->error_code    = mysqli_connect_errno();
    $result->error_message = mysqli_connect_error();
    // terminate and report to error log
    error_log('Database connection failed'.mysqli_connect_error(), 0);
    echo json_encode($result);  // return status as json
    exit;
}

// You should never use data sent from the screen without
// validating it and cleaning it up so you need some sort of 
// $_POST = validate_sanity($_POST);

$username       = $_POST["username"];
$email          = $_POST["email"];
$password       = $_POST["password"];
$phone          = $_POST["phone"];
$balance        = $_POST["balance"];
$NameAndSurname = $_POST["NameAndSurname"];
$DateOfBirth    = $_POST["DateOfBirth"];
$SchoolName     = $_POST["SchoolName"];
$Gender         = $_POST["Gender"];
$Grade          = $_POST["Grade"];
$Class          = $_POST["Class"];
$Country        = $_POST["Country"];
$Province       = $_POST["Province"];
$Address        = $_POST["Address"];
$City           = $_POST["City"];
$PostalCode     = $_POST["PostalCode"];

$sql = "INSERT INTO users 
           (username, email, password, phone, 
            balance, NameAndSurname, DateOfBirth, 
            SchoolName, Gender, Grade, Class, 
            Country, Province, Address, City, 
            PostalCode) 
        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");

$statement = mysqli_prepare($con, $sql );
if ( ! $statement ) {
    $result->status        = 'ERROR';
    $result->error_code    = mysqli_errno();
    $result->error_message = mysqli_error();
    // terminate and report to error log
    error_log('Database connection failed'.mysqli_error(), 0);
    echo json_encode($result);  // return status as json
    exit;
}

$res = mysqli_stmt_bind_param($statement, "ssssisssiisssssi",
               $username, $email, $password, $phone, $balance, 
               $NameAndSurname, $DateOfBirth, $SchoolName, $Gender, 
               $Grade, $Class, $Country, $Province, $Address, $City, 
               $PostalCode);

if ( ! $res ) {
    $result->status        = 'ERROR';
    $result->error_code    = mysqli_errno();
    $result->error_message = mysqli_error();
    // terminate and report to error log
    error_log('Database connection failed'.mysqli_error(), 0);
    echo json_encode($result);  // return status as json
    exit;
}

if ( mysqli_stmt_execute($statement) ) {
    $result->status        = 'OK';
    $result->message       = 'Row deleted';
    echo json_encode($result);  // return status as json
    exit;
} else {
    $result->status        = 'ERROR';
    $result->error_code    = mysqli_errno();
    $result->error_message = mysqli_error();
    // terminate and report to error log
    error_log('Database DELETE failed'.mysqli_error(), 0);
    echo json_encode($result);  // return status as json
    exit;
}

//mysqli_close($con);
//PHP will do all the connection and statment closing automatically 
// So you dont actually need to do any of this unless you are running 
// a script the will consume large numbers of statement and you may
// feel it necessary to close them out to kepp the memory footprint smaller