2017-05-22 22 views
-2

PHPエラー:バインドされた変数の数がトークンの数と一致しません。PHP無効なパラメータ番号:

ここでは何が欠けていますか?私はmedアプリケーションのための新しいユーザーを追加しようとしています。

public function register($uname,$umail,$upass,$fname,$llastname) 
{ 
    try 
    { 
     $new_password = password_hash($upass, PASSWORD_DEFAULT); 

     $stmt = $this->conn->prepare("INSERT INTO users(name, lastname, user_name, user_email, user_pass) VALUES(:fname, :llastname, :uname, :umail, :upass)"); 
     $stmt->bindparam(":fname", $fname); 
     $stmt->bindparam(":llastname", $llastname); 
     $stmt->bindparam(":uname", $uname); 
     $stmt->bindparam(":umail", $umail); 
     $stmt->bindparam(":upass", $new_password);           

     $stmt->execute(); 

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


public function doLogin($uname,$umail,$upass) 
{ 
    try 
    { 
     $stmt = $this->conn->prepare("SELECT name, lastname, user_id, user_name, user_email, user_pass FROM users WHERE name=:fname, lastname=:llastname, user_name=:uname OR user_email=:umail "); 
     $stmt->execute(array(':uname'=>$uname, ':umail'=>$umail)); 
     $userRow=$stmt->fetch(PDO::FETCH_ASSOC); 
     if($stmt->rowCount() == 1) 
     { 
      if(password_verify($upass, $userRow['user_pass'])) 
      { 
       $_SESSION['user_session'] = $userRow['user_id']; 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
     } 
    } 
    catch(PDOException $e) 
    { 
     //HTTPS 
     echo $e->getMessage(); 
    } 
} 

addUser.php正しくバインドしましたか?ここで

$uname = strip_tags($_POST['txt_uname']); 
$umail = strip_tags($_POST['txt_umail']); 
$upass = strip_tags($_POST['txt_upass']); 
$fname = strip_tags($_POST['txt_fname']); 
$llastname = strip_tags($_POST['txt_llastname']); 
+2

無効な構文を必要とするロジックを達成するために括弧を使用する必要があります。マニュアルを参照してください。https://dev.mysql.com/doc/refman/5.7/en/select.html –

答えて

1

$stmt = $user->runQuery("SELECT name, lastname, user_name,user_email 
         FROM users 
         WHERE name=:fname, 
           lastname=:llastname, 
           user_name=:uname 
           OR user_email=:umail"); 

あなたは4(4!)を使用するパラメータ::fname:llastname:uname:umail

を次に、それを実行しながら、あなただけの2(2)のパラメータをバインドします。

$stmt->execute(array(':uname' => $uname, ':umail' => $umail)); 

これはeですxactlyなぜあなたはそのエラーを取得しています。

いずれにしても、SQLクエリはエラーが発生します。 ,(カンマ)の代わりに、WHERE条件に参加するにはANDを使用する必要があります。このように:私はそこに論理積と論理和について全くわからない、けれども

$stmt = $user->runQuery("SELECT name, lastname, user_name,user_email 
        FROM users 
        WHERE name=:fname 
         AND lastname=:llastname 
         AND user_name=:uname 
         OR user_email=:umail"); 

、あなたはSELECTのために

+0

SQLSTATE [42000]:構文エラーまたはアクセス違反:1064 SQL構文にエラーがあります。あなたのMariaDBサーバーのバージョンに対応するマニュアルをチェックして、正しい構文が 'lastname =' lkqjwekljqwe '、' 3行目で使用するようにしてください。 新しいエラーがあります。それは構文エラーですか? – lenewb

+0

はい、「あなたはWHEREでカンマを使用できません」と言っていますが、代わりにANDとORを使用する必要があります。見て、私はちょうど答えを更新した –

関連する問題