2017-10-19 4 views
0
<?php 
class DbOperations 
{ 
    private $con; 

    function __construct() 
    { 
     require_once dirname(__FILE__).'/DbConnect.php'; 

     $db = new DbConnect(); 

     $this->con = $db->connect(); 
    } 

    public function createUser($email, $password, $gender, $dob_year, $dob_month, $dob_day, $time_registered) 
    { 
     if($this->isUserExist($email)) 
     { 
      echo "0"; 
      return 0; 
     } 
     else 
     { 
      $stmt = $this->con->prepare("insert into table_user (`id`, `email`, `password`, `gender`, `dob_year`, `dob_month`, `dob_day`, `time_registered`) values (NULL, ?, ?, ?, ?, ?, ?, ?);"); 

      $stmt->bind_param("sssssss", $email, $password, $gender, $dob_year, $dob_month, $dob_day, $time_registered); 

      if($stmt->execute()) 
      { 
       echo "1"; 
       return 1; 
      } 
      else 
      { 
       echo "2"; 
       return 2; 
      } 
     } 
    } 

    private function isUserExist($email) 
    { 
     $stmt = $this->con->prepare("select id from table_user where email = ?"); 
     $stmt->bind_param("s", $email); 
     $stmt->execute(); 
     $stmt->store_result(); 

     return $stmt->num_rows > 0; 
    } 
} 
?> 

Hallo, ich versuche eine Registrierungsseite zu machen. Die createUser-Funktion funktioniert einwandfrei, wenn ich die Methode isUserExists() mit true oder false zurückgebe. Es scheint wie $ stmt-> num_rows> 0; immer falsch zurück, aber ich sehe, dass Daten in der Datenbank gespeichert werden. Es soll den Rückgabewert bei der Registrierung des Benutzers auf "true" ändern, gibt aber immer "false" zurück. Was ist daran falsch?php isUserExist immer falsch

+0

Was ist der Rückgabewert von '$ this-> Con-> prepare',' $ stmt-> execute(); 'und' $ stmt-> store_result() '? Haben Sie auch Fehlerberichte aktiviert? (Siehe [Wie bekomme ich PHP-Fehler zur Anzeige] (https://stackoverflow.com/questions/1053424/how-do-i-get-php-errors-to-display)) – ccKep

+0

beide sind 1 und 1 – Eric

Antwort

0

Sie haben ein Syntaxproblem und die Parameter auch. Ist "bindParam", nicht "bind_param". Das gleiche Problem tritt auch in der Einfügung auf. Siehe die Beispiele in der Dokumentation: http://php.net/manual/en/pdostatement.bindparam.php.

Verwendung:

$stmt = $this->con->prepare("select id from table_user where email = ?"); 
$stmt->bindParam("1", $email, PDO::PARAM_STR); 

Oder:

$stmt = $this->con->prepare("select id from table_user where email = :email"); 
$stmt->bindParam(":email", $email, PDO::PARAM_STR); 
+0

Dies ist wahrscheinlich mysqli, nicht PDO. Es ist [bind_param] (http://php.net/manual/de/mysqli-stmt.bind-param.php). – ccKep