2017-08-11 3 views
1

Ich denke, dieser Code ist richtig, aber es funktioniert nicht richtig.So lösen Sie den Fehler "SQLSTATE [HY093]: Ungültige Parameternummer: Anzahl der gebundenen Variablen stimmt nicht mit der Anzahl der Token überein"?

Ich versuche, Daten zu aktualisieren, aber es gibt einen Fehler aus. Ich denke, dass dieses Problem während des Bindens gesehen wird, meine Vermutung ist vielleicht falsch!

Fehler

SQLSTATE [HY093]: Ungültige Parameternummer: Anzahl der gebundenen Variablen nicht mit Anzahl von Token

Was ist das Problem?

class.user.php{ 
public function edit_user($uname,$umail,$upass,$uaddress,$uglevel,$ustate,$userpic){ 
     try 
     { 
      $new_password = password_hash($upass, PASSWORD_DEFAULT); 

      $stmt_edit = $this->conn->prepare('UPDATE users SET 
              user_name=:uname, 
              user_email=:umail, 
              user_pass=:upass, 
              user_address=:uadddress, 
              user_grade_level=:uglevel, 
              ustate=:ustate, 
              user_photo=:upic 
              user_id=:user_id 
             WHERE user_id=:user_id'); 
      $stmt_edit->bindparam(":uname", $uname); 
      $stmt_edit->bindparam(":umail", $umail); 
      $stmt_edit->bindparam(":upass", $new_password); 
      $stmt_edit->bindparam(":uaddress", $uaddress); 
      $stmt_edit->bindparam(":uglevel", $uglevel); 
      $stmt_edit->bindparam(":ustate", $ustate); 
      $stmt_edit->bindparam(":upic", $userpic); 

      if($stmt_edit->execute()){ 
       ?> 
       <script> 
        alert('Successfully Updated ...'); 
        window.location.href='user_list.php'; 
       </script> 
      <?php 
      } 

      return $stmt_edit; 
     } 
     catch(PDOException $e) 
     { 
      echo $e->getMessage();`enter code here` 
     } 
    } 

} 
//edit_user.php 
if(isset($_POST['btn_save_updates']))`enter code here` 
{ 
    $uname = strip_tags($_POST['txt_uname']); 
    $umail = strip_tags($_POST['txt_umail']); 
    $upass = strip_tags($_POST['txt_upass']); 
    $uaddress = strip_tags($_POST['txt_uaddress']); 
    $uglevel = strip_tags($_POST['txt_uglevel']); 
    $ustate = strip_tags($_POST['txt_ustate']); 

    $imgFile = $_FILES['user_image']['name'];//image file 
    $tmp_dir = $_FILES['user_image']['tmp_name'];//directory 
    $imgSize = $_FILES['user_image']['size'];//image file size 

    if($imgFile) 
    { 
     $upload_dir = 'LMS_students/'; // upload directory 
     $imgExt = strtolower(pathinfo($imgFile,PATHINFO_EXTENSION)); // get image extension 
     $valid_extensions = array('jpeg', 'jpg', 'png', 'gif'); // valid extensions 
     $userpic = rand(1000,1000000).".".$imgExt; 
     if(in_array($imgExt, $valid_extensions)) 
     { 
      if($imgSize < 5000000) 
      { 
       unlink($upload_dir.$edit_row['user_photo']); 
       move_uploaded_file($tmp_dir,$upload_dir.$userpic); 
      } 
      else 
      { 
       $errMSG = "Sorry, your file is too large it should be less then 5MB"; 
      } 
     } 
     else 
     { 
      $errMSG = "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; 
     } 
    } 
    else 
    { 
     // if no image selected the old image remain as it is. 
     $userpic = $edit_row['user_photo']; // old image from database 
    } 


    // if no error occured, continue .... 
    if(!isset($errMSG)) 
    { 

     $user -> edit_user($uname,$umail,$upass,$uaddress,$uglevel,$ustate,$userpic); 

    } 
    else{ 
     ?> 
     <script> 
      alert('user couldnt be Updated'); 
      window.location.href='user_list.php'; 
     </script> 
    <?php 
    } 
} 

?> 
+0

'user_id =: user_id' Ich denke, diese Linie hat ein Problem .. Übergeben Sie user_id? –

+2

wie der Fehler sagte, Sie haben einfach nicht die gleiche Anzahl von Binded Param, vermissen Sie: userid – MacBooc

+0

Sie können nicht Platzhalter entweder verwenden, obwohl, warum Sie "user_id" aktualisieren möchten, wenn es nicht ändert, ich don ' Ich weiß es. –

Antwort

0

Bitte überprüfen Sie unter Punkt

1) Sie nicht user_id binden haben.

2) user_photo=:upic, // missing comma

3) user_address=:uadddress, // typo ddd

Sie haben nicht in Funktion hinzugefügt User_id so, dass hinzufügen müssen, verwenden Sie dann in bindparam

+0

@sureshadhikari, hast du es gelöst? –

Verwandte Themen