繁体   English   中英

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

[英]SQLSTATE[HY093]:Invalid parameter number:parameter was not defined

问题多次出现,但我确实无法在代码中找到错误。 我看到解决方案通常是拼写错误的单词,但我找不到。 因此,我认为在其他方面可能是错误的,因为我是使用PDO的新手。

我正在注册页面,错误是

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`);

您的参数绑定似乎已关闭。 试试吧

   $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(); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM