【解決方法】エラー: SQLSTATE[HY093]: 無効なパラメーター番号: バインドされた変数の数がトークンの数と一致しません。このコードをローカルで実行しています


PHP
if(isset($_POST['login'])) {
  $username = stripcslashes($_POST['username']);
  $password = $_POST['password'];
  if($username != "" && $password != "") {
    try {
      $query = " SELECT password FROM users WHERE username=?";
      $stmt = $db->prepare($query);
      $stmt->bindParam('username', $username, PDO::PARAM_STR);
      $stmt->bindValue('password', $password, PDO::PARAM_STR);
      $stmt->execute();
      $count = $stmt->rowCount();
      $row   = $stmt->fetch(PDO::FETCH_ASSOC);
      if($count == 1 && !empty($row)) {
        /******************** Your code ***********************/
        //$_SESSION['sess_user_id']   = $row['uid'];
        $_SESSION['username'] = $row['username'];
        $_SESSION['name'] = $row['name'];
     
      } else {
        $msg = "Invalid login credentials";
      }
    } catch (PDOException $e) {
      echo "Error : ".$e->getMessage();
    }
  } else {
    $msg = "Both fields are required!";
  }
}

私が試したこと:

インターネットでいくつかの調査を試み、スクリプトの変更を試みました

解決策 1

これはあなたの問題かもしれません

PHP
$query = " SELECT password FROM users WHERE username=?";

あなたのクエリには、その中に1つのパラメータがあります ユーザー名ですが、コマンドに 2 つのパラメーターを追加しています。

PHP
$stmt->bindParam('username', $username, PDO::PARAM_STR);
$stmt->bindValue('password', $password, PDO::PARAM_STR);

また…パスワードをプレーンテキストとして保存していないことを願っています。

解決策 2

これは 3 年間続きますが、後でここに出くわす人のために:

SQLステートメントを文字列にします…変数値を入れることができます。

次に、操作する値のバインドを使用してクエリをパラメーター化します。

$thingSql = sprintf(“物に挿入(
「id」
) 値 (
ID
);”);

$thingQueryObject = $this->dbConnection->prepare($thingSql);
$thingQueryObject->bindParam(‘:id’, $this->thingId, PDO::PARAM_INT);

コメント

タイトルとURLをコピーしました