mysqli_stmt_fetch()不工作

时间:2016-06-25 02:12:00

标签: php android mysql

我正在尝试从mysqli_stmt_fetch()语句中保存值。运行我的应用程序时,它会为此变量返回No Value。我是PHP新手,无法完全调试此文件。错误在哪里?

我的php文件:

<?php
    require("password.php");

    $connect = mysqli_connect("website", "account", "my_pass", "db");

    $name = $_POST["name"];
    $theme = $_POST["theme"];
    $username = $_POST["username"];
    $email = $_POST["email"];
    $defaultRadius = $_POST["radius"];
    $password = $_POST["password"];

    function registerUser() {
        global $connect, $name, $username, $theme, $email, $defaultRadius, $password;
        $passwordHash = password_hash($password, PASSWORD_DEFAULT);
        $statement = mysqli_prepare($connect, "INSERT INTO user (name, username, theme, email, default_radius, password) VALUES (?, ?, ?, ?, ?, ?)");
        mysqli_stmt_bind_param($statement, "ssssss", $name, $username, $theme, $email, $defaultRadius, $passwordHash);
        mysqli_stmt_execute($statement);
        mysqli_stmt_bind_result($statement, $colUserID, $colName, $colUsername, $colTheme, $colEmail, $colDefaultRadius, $colPassword);
        while(mysqli_stmt_fetch($statement)){
            $response["userId"] = $colUserID;
        }
        mysqli_stmt_close($statement);
    }

    function usernameAvailable() {
        global $connect, $username;
        $statement = mysqli_prepare($connect, "SELECT * FROM user WHERE username = ?"); 
        mysqli_stmt_bind_param($statement, "s", $username);
        mysqli_stmt_execute($statement);
        mysqli_stmt_store_result($statement);
        $count = mysqli_stmt_num_rows($statement);
        mysqli_stmt_close($statement); 
        if ($count < 1){
            return true; 
        } else {
            return false; 
        }
    }

    $response = array();
    $response["success"] = false;  
    $response["reason"] = 0;

    if (usernameAvailable()){
        registerUser();
        $response["success"] = true;
    } else {
        $response["reason"] = 1;
    }

    echo json_encode($response);
?>

我尝试设置的变量位于registerUser函数内。它声明:

while(mysqli_stmt_fetch($statement)){
    $response["userId"] = $colUserID;
}

感谢您的帮助!

修改 我的新/当前代码如下:

<?php
    require("password.php");

    $connect = mysqli_connect("xenicdev.x10host.com", "xenicdev_root", "shadow1", "xenicdev_data");

    $name = $_POST["name"];
    $theme = $_POST["theme"];
    $username = $_POST["username"];
    $email = $_POST["email"];
    $defaultRadius = $_POST["radius"];
    $password = $_POST["password"];

    function registerUser() {
        global $connect, $name, $username, $theme, $email, $defaultRadius, $password, $response;
        $passwordHash = password_hash($password, PASSWORD_DEFAULT);
        $statement = mysqli_prepare($connect, "INSERT INTO user (name, username, theme, email, default_radius, password) VALUES (?, ?, ?, ?, ?, ?)");
        mysqli_stmt_bind_param($statement, "ssssss", $name, $username, $theme, $email, $defaultRadius, $passwordHash);
        mysqli_stmt_execute($statement);
        mysqli_stmt_bind_result($statement, $colUserID, $colName, $colUsername, $colTheme, $colEmail, $colDefaultRadius, $colPassword);
        while(mysqli_stmt_fetch($statement)){
            return $colUserID;
        }
    }

    function usernameAvailable() {
        global $connect, $username;
        $statement = mysqli_prepare($connect, "SELECT * FROM user WHERE username = ?"); 
        mysqli_stmt_bind_param($statement, "s", $username);
        mysqli_stmt_execute($statement);
        mysqli_stmt_store_result($statement);
        $count = mysqli_stmt_num_rows($statement);
        mysqli_stmt_close($statement); 
        if ($count < 1){
            return true; 
        } else {
            return false; 
        }
    }

    $response = array();
    $response["success"] = false;  
    $response["reason"] = 0;

    if (usernameAvailable()){
        $userId = registerUser();
        $response["userId"] = $userId;
        $response["success"] = true;
    } else {
        $response["reason"] = 1;
    }

    echo json_encode($response);
?>

它返回null作为“userId”而不是ID ...请注意SQL数据库中的ID不为空。在我的测试用例中,ID为8。

用于从Android调用此PHP文件的StringRequest代码:

public class RegisterRequest extends StringRequest {

    private static final String REGISTER_REQUEST_URL = "http://xenicdev.x10host.com/Register.php";
    private Map<String, String> params;

    public RegisterRequest(String name, String username, int themeId, String password, String email, int defaultRadius, Response.Listener<String> listener) {
        super(Method.POST, REGISTER_REQUEST_URL, listener, null);
        params = new HashMap<>();
        params.put("name", name);
        params.put("username", username);
        params.put("theme", themeId + "");
        params.put("email", email);
        params.put("radius", defaultRadius + "");
        params.put("password", password);
    }

    @Override
    public Map<String, String> getParams() {
        return params;
    }
}

1 个答案:

答案 0 :(得分:0)

如果您需要last insert userID,可以试试这个。然后,这将帮助您更改部分code

<?php
 require("password.php");   
  $connect = mysqli_connect("xenicdev.x10host.com", "xenicdev_root", "shadow1", "xenicdev_data");
    $name =  $_POST["name"];
    $theme = $_POST["theme"];
    $username = $_POST["username"];
    $email = $_POST["email"];
    $defaultRadius = $_POST["radius"];
    $password = $_POST["password"];

    function registerUser() {
        global $connect, $name, $username, $theme, $email, $defaultRadius, $password;

        $passwordHash = password_hash($password, PASSWORD_DEFAULT);
$stmt = $connect->prepare("INSERT INTO user (name, username, theme, email, default_radius, password) VALUES (?, ?, ?, ?, ?, ?)");
$stmt->bind_param("ssssss",  $name, $username, $theme, $email, $defaultRadius, $passwordHash);
$stmt->execute();
 return $userID = $stmt->insert_id;
    }

    function usernameAvailable() {
        global $connect, $username;
        $statement = mysqli_prepare($connect, "SELECT * FROM user WHERE username = ?"); 
        mysqli_stmt_bind_param($statement, "s", $username);
        mysqli_stmt_execute($statement);
        mysqli_stmt_store_result($statement);
        $count = mysqli_stmt_num_rows($statement);
        mysqli_stmt_close($statement); 
        if ($count < 1){
            return true; 
        } else {
            return false; 
        }
    }

    $response = array();
    $response["success"] = false;  
    $response["reason"] = 0;


    if (usernameAvailable()){
      $userID =  registerUser();
        $response["success"] = true;
        $response["userId"] =  $userID; 
    } else {
        $response["reason"] = 1;
    }

    echo json_encode($response);
?>