2017-05-22 2 views
-2

PHP Fehler: Anzahl der gebundenen Variablen stimmt nicht mit der Anzahl der Token überein.PHP Ungültige Parameternummer:

Was fehlt mir hier? Ich versuche, einen neuen Benutzer für meine medizinische Anwendung hinzuzufügen.

public function register($uname,$umail,$upass,$fname,$llastname) 
{ 
    try 
    { 
     $new_password = password_hash($upass, PASSWORD_DEFAULT); 

     $stmt = $this->conn->prepare("INSERT INTO users(name, lastname, user_name, user_email, user_pass) VALUES(:fname, :llastname, :uname, :umail, :upass)"); 
     $stmt->bindparam(":fname", $fname); 
     $stmt->bindparam(":llastname", $llastname); 
     $stmt->bindparam(":uname", $uname); 
     $stmt->bindparam(":umail", $umail); 
     $stmt->bindparam(":upass", $new_password);           

     $stmt->execute(); 

     return $stmt; 
    } 
    catch(PDOException $e) 
    { 
     echo $e->getMessage(); 
    }    
} 


public function doLogin($uname,$umail,$upass) 
{ 
    try 
    { 
     $stmt = $this->conn->prepare("SELECT name, lastname, user_id, user_name, user_email, user_pass FROM users WHERE name=:fname, lastname=:llastname, user_name=:uname OR user_email=:umail "); 
     $stmt->execute(array(':uname'=>$uname, ':umail'=>$umail)); 
     $userRow=$stmt->fetch(PDO::FETCH_ASSOC); 
     if($stmt->rowCount() == 1) 
     { 
      if(password_verify($upass, $userRow['user_pass'])) 
      { 
       $_SESSION['user_session'] = $userRow['user_id']; 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
     } 
    } 
    catch(PDOException $e) 
    { 
     //HTTPS 
     echo $e->getMessage(); 
    } 
} 

addUser.php habe ich es richtig gebunden?

$uname = strip_tags($_POST['txt_uname']); 
$umail = strip_tags($_POST['txt_umail']); 
$upass = strip_tags($_POST['txt_upass']); 
$fname = strip_tags($_POST['txt_fname']); 
$llastname = strip_tags($_POST['txt_llastname']); 
+2

ungültige Syntax für SELECT müssen zu erreichen. Siehe das Handbuch https://dev.mysql.com/doc/refman/5.7/en/select.html –

Antwort

1

hier:

$stmt = $user->runQuery("SELECT name, lastname, user_name,user_email 
         FROM users 
         WHERE name=:fname, 
           lastname=:llastname, 
           user_name=:uname 
           OR user_email=:umail"); 

Sie verwenden 4 (vier!) Parameter: :fname, :llastname, :uname, :umail

Dann, während es ausgeführt wird Sie nur 2 (zwei) Parameter binden:

$stmt->execute(array(':uname' => $uname, ':umail' => $umail)); 

Dies ist e Genau warum bekommst du diesen Fehler?

Übrigens, Ihre SQL-Abfrage ist fehlerhaft. Anstelle von , (Komma) sollten Sie AND verwenden, um die WHERE Bedingungen zu verbinden. Wie folgt aus:

$stmt = $user->runQuery("SELECT name, lastname, user_name,user_email 
        FROM users 
        WHERE name=:fname 
         AND lastname=:llastname 
         AND user_name=:uname 
         OR user_email=:umail"); 

Obwohl, ich bin nicht ganz sicher über ANDs und RUP dort, müssen Sie Klammern verwenden, um die Logik, die Sie

+0

SQLSTATE [42000]: Syntaxfehler oder Zugriffsverletzung: 1064 Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MariaDB-Serverversion entspricht, damit die richtige Syntax in der Nähe von 'lastname =' lkqjwekljqwe ',' in Zeile 3 einen neuen Fehler hat. ist es ein Syntaxfehler? – lenewb

+0

Ja, es sagt Ihnen "Sie können Kommas nicht in WHERE verwenden", Sie sollten stattdessen ANDs und ORs verwenden. Schau, ich habe gerade die Antwort aktualisiert –

Verwandte Themen