2017-02-11 12 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(); 
     } 
    } 
} 

とここに私の問題のある関数のフォームクラスUser

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(); 
関連する問題