Я видел много ответов о входе в php с именем пользователя или электронной почтой, но я не могу найти разрешение «Mysqli Prepare Statement», все они использовали PDO ...
Мой вопрос: почему я не могу использовать два ?
для выбора имени пользователя или адреса электронной почты?
Мой код здесь:
База данных
table user
--id int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
--username varchar(20),
--password varchar(255),
--email varchar(30),
HTML
<form action="login.php" id="login_form" method="post">
<input type="text" name="account" placeholder="username or email" />
<input type="password" name="password" placeholder="password" />
<div class="login_submit">
<button type="submit" name="submit">Login</button>
</div>
</form>
PHP
<?php
$con = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, DB_PORT);
$con->query('SET CHARACTER SET utf8');
if (isset($_POST['submit'])) {
$account = $_POST['account'];
$get_password = $_POST['password'];
$login_query = 'SELECT username,password,email FROM user WHERE username = ? OR email = ?';
$login_stmt = $con->stmt_init();
if ($login_stmt->prepare($login_query)) {
$login_stmt->bind_param('ss', $account, $account);
$login_stmt->execute();
$login_stmt->bind_result($username, $password, $email);
$login_result = $login_stmt->get_result();
while ($login_row = $login_result->fetch_assoc()) {
$check_password = $login_row['password'];
}
} else {
echo 'Login Error';
exit();
}
if ($login_result->num_rows == 0) {
$account_error = $lang_account_not_exist;
$login_permit = false;
} elseif (!password_verify($get_password, $check_password)) {
$password_error = $lang_wrong_password;
$login_permit = false;
}
EDIT
bind_result($username, $password, $email);