Помимо вашего использования global
и вашего include
внутри функции (вы должны исследовать альтернативный способ структурирования вашей функции, чтобы этого не делать), я бы изменил код следующим образом:
$sql =
'SELECT id
FROM user
WHERE UserID = ?
AND UserPW = ?
LIMIT 1';
$stmt = $conn->prepare($sql);
$stmt->execute(array(
'09185346d',
'asdasdsa'
));
if ($stmt->rowCount() == 1) {
return 0;
}
else {
return 1;
}
Объединение запросов, чтобы дать общую ошибку аутентификации, вместо того, чтобы позволить людям опробовать действительные имена пользователей, а затем действительные пароли, а затем с помощью метода PDOStatements rowCount
проверить, была ли возвращена ваша строка.
Комуответьте на свою вторую часть, нет необходимости специально использовать bindParam
для предотвращения внедрения SQL.
Вот краткий пример различия между bindParam
и bindValue
$param = 1;
$sql = 'SELECT id FROM myTable WHERE myValue = :param';
$stmt = $conn->prepare($sql);
Использование bindParam
$stmt->bindParam(':param', $param);
$param = 2;
$stmt->execute();
ВЫБЕРИТЕ идентификатор ИЗ myTable ГДЕ myValue = '2'
Использование bindValue
$stmt->bindValue(':param', $param);
$param = 2;
$stmt->execute();
ВЫБЕРИТЕ idОТ myTable ГДЕ myValue = '1'