2017-02-11 146 views
0

问题出现了多次,但我真的找不到我的代码中的错误。我看到解决方案通常是拼错的,但我找不到。所以我认为也许我在其他方面是错误的,因为我是使用PDO的新手。SQLSTATE [HY093]:无效的参数号:参数未定义

我正在注册页面和错误

SQLSTATE [HY093]:无效的参数号:没有定义的参数

这里是我的代码:

//index.php 
if(isset($_POST['btn-signup-preduzece'])) { 
    $uname = trim($_POST['pr-username']); //there are inputs in my html 
    $umail = trim($_POST['pr-email']); 
    $upass = trim($_POST['pr-password']); 
    $comp = trim($_POST['pr-naziv']); 
    $maticni = trim($_POST['pr-maticni']); 
    $pib = trim($_POST['pr-pib']); 
    $sifra = trim($_POST['pr-sifra']); 
    $racun = trim($_POST['pr-racun']); 
    $adresa = trim($_POST['pr-adresa']); 

    if($uname=="") { 
     $error[] = "provide username !"; 
    } 
    else if($umail=="") { 
     $error[] = "provide email id !"; 
    } 
    else if(!filter_var($umail, FILTER_VALIDATE_EMAIL)) { 
     $error[] = 'Please enter a valid email address !'; 
    } 
    else if($upass=="") { 
     $error[] = "provide password !"; 
    } 
    else { 
     try { 
      $stmt = $DB_con->prepare("SELECT username,email FROM preduzeca WHERE username=:uname OR email=:umail"); 
      $stmt->execute(array(':uname'=>$uname, ':umail'=>$umail)); 
      $row=$stmt->fetch(PDO::FETCH_ASSOC); 

      if($row['username']==$uname) { 
       $error[] = "sorry username already taken !"; 
      } 
      else if($row['email']==$umail) { 
       $error[] = "sorry email id already taken !"; 
      } 
      else { 
       //PROBLEM IS HERE IN THIS FUNTION BELLOW, when I put here some echo it writes me that, but if i put echo bellow this if statement it gives me nothing 
       if($user->registerPreduzece($uname,$upass,$umail, $comp, $maticni, $pib, $sifra, $racun, $adresa)) { 
        $user->redirect('ostalo/uspesno.php'); 
       } 
      } 
     } 
     catch(PDOException $e) { 
      echo $e->getMessage(); 
     } 
    } 
} 

和这里是我有问题的功能形式类用户

public function registerPreduzece($uname,$upass,$umail, $comp, $maticni, $pib, $sifra, $racun, $adresa) { 
    try 
    { 
     $new_password = password_hash($upass, PASSWORD_DEFAULT);   

     $stmt = $this->db->prepare("INSERT INTO preduzeca(naziv,maticniBroj,PIB,sifraDelatnosti,racun,adresa,username,password,email) 
                VALUES(:comp, :maticni, :pib, :sifra, :racun, :adresa, :uname, :upass, :umail)"); 
     $stmt->bindparam(":naziv", $comp); 
     $stmt->bindparam(":maticniBroj", $maticni); 
     $stmt->bindparam(":PIB", $pib); 
     $stmt->bindparam(":sifraDelatnosti", $sifra); 
     $stmt->bindparam(":racun", $racun); 
     $stmt->bindparam(":adresa", $adresa); 
     $stmt->bindparam(":username", $uname); 
     $stmt->bindparam(":password", $new_password); 
     $stmt->bindparam(":email", $umail);    
     $stmt->execute(); 

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

和我的表

CREATE TABLE `preduzeca` (
`idPreduzeca` int(10) UNSIGNED NOT NULL, 
`naziv` varchar(45) NOT NULL, 
`maticniBroj` varchar(8) DEFAULT NULL, 
`PIB` varchar(11) DEFAULT NULL, 
`sifraDelatnosti` varchar(5) DEFAULT NULL, 
`racun` varchar(20) DEFAULT NULL, 
`adresa` int(11) DEFAULT NULL, 
`username` varchar(45) NOT NULL, 
`password` varchar(45) NOT NULL, 
`email` varchar(45) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

ALTER TABLE `preduzeca` 
ADD PRIMARY KEY (`idPreduzeca`), 
ADD UNIQUE KEY `idfirme_UNIQUE` (`idPreduzeca`), 
ADD UNIQUE KEY `username_UNIQUE` (`username`), 
ADD UNIQUE KEY `maticniBroj_UNIQUE` (`maticniBroj`), 
ADD UNIQUE KEY `PIB_UNIQUE` (`PIB`), 
ADD UNIQUE KEY `racun_UNIQUE` (`racun`), 
ADD KEY `fk_preduzeca_adrese1_idx` (`adresa`); 
+2

您的bindparam中的名称与您的查询中的占位符名称不匹配。例如,查询中包含':maticniBroj'和':maticni'。 – YvesLeBorg

+0

是的,就是这样。我错误地理解了这个bindparam。非常感谢你。你可以把答案,如果你想,我要去标记它 – dreamer

回答

0

的参数的结合似乎是关闭。尝试改为

$stmt = $this->db->prepare("INSERT INTO preduzeca(naziv,maticniBroj,PIB,sifraDelatnosti,racun,adresa,username,password,email) 
               VALUES(:comp, :maticni, :pib, :sifra, :racun, :adresa, :uname, :upass, :umail)"); 
    $stmt->bindparam(":comp", $comp); 
    $stmt->bindparam(":maticni", $maticni); 
    $stmt->bindparam(":pib", $pib); 
    $stmt->bindparam(":sifra", $sifra); 
    $stmt->bindparam(":racun", $racun); 
    $stmt->bindparam(":adresa", $adresa); 
    $stmt->bindparam(":uname", $uname); 
    $stmt->bindparam(":upass", $new_password); 
    $stmt->bindparam(":umail", $umail);    
    $stmt->execute(); 
相关问题