gavin_daCEO Ответов: 1

Ошибка : SQLSTATE[HY093]: недопустимый номер параметра: количество связанных переменных не соответствует количеству токенов, я запускаю этот код локально


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 Ответов

Рейтинг:
10

MadMyche

Ну это похоже на то что это может быть ваша проблема

$query = " SELECT password FROM users WHERE username=?";
В вашем запросе есть один параметр для имя пользователя, но вы добавляете в команду два параметра.
$stmt->bindParam('username', $username, PDO::PARAM_STR);
$stmt->bindValue('password', $password, PDO::PARAM_STR);
Также... Я очень надеюсь, что вы не сохраняете пароли в виде обычного текста.


Maciej Los

5ed!

gavin_daCEO

Спасибо, я пытаюсь понять, как я могу построить запрос, чтобы он мог работать. Нет я не храню пароли в простых текстах

MadMyche

Пожалуйста.
Я решил, что проверю, как многие люди хранят их просто

gavin_daCEO

Большое вам спасибо, как только я построю рабочий запрос, и он сработает, я дам вам знать. спасибо снова