2015-10-17 155 views
0

我想做一个登录android系统,当我尝试登录我得到错误"undefined function consigueResultado"在74行,但我宣布函数。有人知道可能是错的吗? 我正在使用000webhost可能与此错误有任何关系?谢谢:)Php函数出现未声明

<?php 
class DB_Functions { 

    private $conn; 

    // constructor 
    function __construct() { 
     require_once 'DB_Connect.php'; 
     // connecting to database 
     $db = new Db_Connect(); 
     $this->conn = $db->connect(); 
    } 

    // destructor 
    function __destruct() { 

    } 

    public function consigueResultado($stmt) { 
     $RESULT = array(); 
     $stmt->store_result(); 
     for ($i = 0; $i < $stmt->num_rows; $i++) { 
      $Metadata = $stmt->result_metadata(); 
      $PARAMS = array(); 
      while ($Field = $Metadata->fetch_field()) { 
       $PARAMS[] = &$RESULT[ $i ][ $Field->name ]; 
      } 
      call_user_func_array(array($stmt, 'bind_result'), $PARAMS); 
      $stmt->fetch(); 
     } 
     return $RESULT; 
    } 

    /** 
    * Storing new user 
    * returns user details 
    */ 
    public function storeUser($name, $email, $password) { 
     $uuid = uniqid('', true); 
     $hash = $this->hashSSHA($password); 
     $encrypted_password = $hash["encrypted"]; // encrypted password 
     $salt = $hash["salt"]; // salt 

     $stmt = $this->conn->prepare("INSERT INTO users(unique_id, name, email, encrypted_password, salt, created_at) VALUES(?, ?, ?, ?, ?, NOW())"); 
     $stmt->bindParam("sssss", $uuid, $name, $email, $encrypted_password, $salt); 
     $result = $stmt->execute(); 
     $stmt->close(); 

     // check for successful store 
     if ($result) { 
      $stmt = $this->conn->prepare("SELECT * FROM users WHERE email = :email"); 
      $stmt->bindParam(':email', $email); 
      $stmt->execute(); 
      $user = consigueResultado($stmt); 
      $stmt->close(); 

      return $user; 
     } else { 
      return false; 
     } 
    } 

    /** 
    * Get user by email and password 
    */ 
    public function getUserByEmailAndPassword($email, $password) { 

     $stmt = $this->conn->prepare("SELECT * FROM users WHERE email =:email"); 

     $stmt->bindParam(':email', $email); 

     if ($stmt->execute()) { 
      $user = consigueResultado($stmt); 
      $stmt->close(); 
      return $user; 
     } else { 
      return NULL; 
     } 
    } 

    /** 
    * Check user is existed or not 
    */ 
    public function isUserExisted($email) { 
     $stmt = $this->conn->prepare("SELECT email from users WHERE email = :email"); 

     $stmt->bindParam(':email', $email); 
     $stmt->execute(); 

     $stmt->store_result(); 

     if ($stmt->num_rows > 0) { 
      // user existed 
      $stmt->close(); 
      return true; 
     } else { 
      // user not existed 
      $stmt->close(); 
      return false; 
     } 
    } 

    /** 
    * Encrypting password 
    * @param password 
    * returns salt and encrypted password 
    */ 
    public function hashSSHA($password) { 

     $salt = sha1(rand()); 
     $salt = substr($salt, 0, 10); 
     $encrypted = base64_encode(sha1($password . $salt, true) . $salt); 
     $hash = array("salt" => $salt, "encrypted" => $encrypted); 
     return $hash; 
    } 

    /** 
    * Decrypting password 
    * @param salt, password 
    * returns hash string 
    */ 
    public function checkhashSSHA($salt, $password) { 

     $hash = base64_encode(sha1($password . $salt, true) . $salt); 

     return $hash; 
    } 
} 
?> 
+2

您可以在类中定义函数。这意味着你必须使用类对象来访问它,例如:'$ this-> consigueResultado(...)' – arkascha

+0

是的。就像阿卡沙说的那样。 –

回答

2

函数称为方法。方法不存在于全局范围中,而是存在于对象的作用域中。通过阅读Classes and Objects更好地理解这一点。这样做的直接影响是,你不应该试图调用功能 consigueResultado,而是像这样的方法:

$user = $this->consigueResultado($stmt); 
3

,我们必须使用这个关键字$呼叫当前类的方法内部类,例如你的方法调用应该像这样的类

$this->consigueResultado($stmt); 
0

你可以尝试使用打电话的self功能。试试这个self::consigueResultado(..);

2

请为该类创建一个对象,之后您可以调用该函数。

$obj = new Yourclassname(); 
$obj->yourfunction(); 

就像这个...

0

你为什么用 “:电子邮件”,而不是 “s” 吗?

“:email”声明在哪里?