为什么我得到这个错误“SQLSTATE [HY093]:无效的参数号:参数未定义”?

问题描述:

我有这段代码插入数据到MySQL。当我尝试调用函数register_emp()时发生错误。你能告诉我该怎么做才能解决这种错误。谢谢。为什么我得到这个错误“SQLSTATE [HY093]:无效的参数号:参数未定义”?

if($user->register_emp($last,$first,$middle,$middle, 
         $address,$contact,$email,$birth,$gender, 
         $status,$citizen,$position,$dependent)) 
{ 
    try 
    { 

     $stmt = $user->runQuery("SELECT MAX(ID) as LastID from employeeprofile"); 
     $stmt->execute(array()); 
     $userRow=$stmt->fetch(PDO::FETCH_ASSOC); 
     if($stmt->rowCount() == 1)if($stmt->rowCount() == 1){ 
     $owner=$userRow['LastID']; 

     if($user->register_contrib($owner,$sss,$tin,$pagibig,$phil)){ 
      $user->redirect('admin1.php'); 
     } 
    } 

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

} 

这是我试图调用的register_emp函数。

public function register_emp($last,$first,$middle,$address, 
          $zip,$contact,$email,$birth, 
          $gender,$status,$citizen,$position,$dependent) 
{ 
    try 
    { 


     $stmt = $this->conn->prepare("INSERT INTO `proll`.`employeeprofile` 
     (`Lastname`, `Firstname`, `Middlename`, `Address`, `ZIP`, `Contact`, `Email`, `Birthdate`, `Gender`, `Status`, `Citizenship`, `Position`, `Dependent`) VALUES 
     (:last,:first,:middle,:address,:zip,:contact,:email,:birth,:gender,:status,:citizenship,:position,:dependent)"); 


     $stmt->bindparam(":last", $last); 
     $stmt->bindparam(":first", $first); 
     $stmt->bindparam(":middle", $middle); 
     $stmt->bindparam(":address", $address); 
     $stmt->bindparam(":zip", $zip); 
     $stmt->bindparam(":contact", $contact); 
     $stmt->bindparam(":email", $email); 
     $stmt->bindparam(":birth", $birth); 
     $stmt->bindparam(":gender", $gender); 
     $stmt->bindparam(":status", $status);  
     $stmt->bindparam(":citizen", $citizen); 
     $stmt->bindparam(":position", $position); 
     $stmt->bindparam(":dependent", $dependent); 


     $stmt->execute(); 

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

它似乎不是来自runQuery。检查register_emp和register_contrib并查找错误中的行号/文件。 – aynber

+0

您最好向我们展示'runQuery()'的作用。如果它运行了一个' - > query()',它可以解释一些问题 – RiggsFolly

+0

我猜想在一个不需要任何参数的' - > execute()中传递的数组参数可能是问题。试试'$ stmt-> execute()',看看错误是否消失 – RiggsFolly

问题出在公民/公民身上。您正在使用不同的字为准备发言,并结合:

$stmt = $this->conn->prepare("INSERT INTO `proll`.`employeeprofile` 
    (`Lastname`, `Firstname`, `Middlename`, `Address`, `ZIP`, `Contact`, `Email`, `Birthdate`, `Gender`, `Status`, `Citizenship`, `Position`, `Dependent`) VALUES 
    (:last,:first,:middle,:address,:zip,:contact,:email,:birth,:gender,:status,:citizenship,:position,:dependent)"); 

.... 

    $stmt->bindparam(":citizen", $citizen); 

更改他们是同一个词,你会好的。

+0

谢谢你的回答。上帝保佑 – generals