-2

我在下面的代码下运行时遇到错误,请帮助我

public function storeUser($name, $email, $password, $phone,$stream) {

   $response = array();

    $uuid = uniqid('', true);
    $hash = $this->hashSSHA($password);
    $encrypted_password = $hash["encrypted"]; // encrypted password
    $salt = $hash["salt"]; // salt

    if (!$this->isUserExisted($email)) {

        $stmt = $this->conn->prepare("INSERT INTO users(unique_id, name, email, encrypted_password, phone,stream, salt, created_at) VALUES('$uuid','$name','$email',$'$encrypted_password','$phone','$stream','$salt',NOW())");
        $stmt->bind_param("isssisss", $uuid,$name,$email,$encrypted_password,$phone,$stream,$salt,NOW());

        $result = $stmt->execute();

        $stmt->close();

        if ($result) {

            // User successfully inserted
            $response["error"] = false;
            $response["user"] = $this->getUserByEmailAndPassword($email);
        }else {

            $response["error"] = true;
            $response["message"] = "Oops! An error occurred while registereing";
        }


    } else {

        $response["error"] = false;
        $response["user"] = $this->getUserByEmailAndPassword($email);
    }

      return $response;

}

错误是

PHP 致命错误:在第 98 行的 /var/www/html/android_login_api_test/include/DB_Functions.php 中的非对象上调用成员函数 bind_param()

4

2 回答 2

3

您正在准备一个没有占位符的查询,即:

$stmt = $this->conn->prepare("INSERT INTO users(unique_id, name, email, encrypted_password, phone,stream, salt, created_at) VALUES('$uuid','$name','$email',$'$encrypted_password','$phone','$stream','$salt',NOW())");
$stmt->bind_param("isssisss", $uuid,$name,$email,$encrypted_password,$phone,$stream,$salt,NOW());

在我看来,您复制粘贴了代码。将上面的代码替换为:

$stmt = $this->conn->prepare("INSERT INTO users(unique_id, name, email, encrypted_password, phone,stream, salt, created_at) VALUES(?,?,?,?,?,?,?,NOW())");
$stmt->bind_param("isssiss", $uuid,$name,$email,$encrypted_password,$phone,$stream,$salt);

请注意,我删除了函数中的最后一个参数bind_param,以及所述函数的第一个参数中的最后一个“s”。

于 2016-04-11T18:38:19.110 回答
-2

$stmt存储prepare函数的结果。似乎prepare不返回对象,但您试图$stmt作为对象访问。

于 2016-04-11T18:39:26.017 回答