Почему данные не добавляются в таблицу MySQL?

How can I improve the security of user registration by properly storing passwords in a database and preventing SQL injection in PHP?
  • 9 января 2024 г. 22:01
Ответы на вопрос 3
Если данные не добавляются в таблицу MySQL, могут быть разные причины, вот некоторые из них:

1. Ошибки в SQL-запросе: проверьте корректность вашего SQL-запроса.
2. Проблемы с подключением: убедитесь, что подключение к базе данных осуществлено правильно.
3. Неправильные доступы: проверьте, имеет ли ваш пользователь MySQL права на вставку данных в таблицу.
4. Проблемы с типами данных: убедитесь, что данные, которые вы пытаетесь вставить, соответствуют типам данных столбцов в таблице.
5. Проблемы с ограничениями в таблице (например, UNIQUE constraint): данные должны удовлетворять всем ограничениям, установленным для таблицы.
6. Ошибки в логике PHP-кода: проверьте работу PHP-скрипта и обработку ошибок после выполнения SQL-запросов.

Теперь к безопасности:

Для обеспечения безопасности регистрации пользователей и хранения паролей в базе данных, а также для предотвращения SQL-инъекций, можно использовать следующие методы:

1. Хэширование паролей: используйте надёжные алгоритмы хэширования, такие как Bcrypt, для хранения паролей. В PHP для этого можно использовать функции `password_hash()` и `password_verify()`.

Пример использования:
```php
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);

// При проверке пароля
if (password_verify($password, $hashedPassword)) {
    // Пароль правильный
}
```

2. Использование подготовленных запросов (prepared statements): они предотвращают SQL-инъекции, так как разделяют данные от SQL-кода.

Пример использования с PDO:
```php
$pdo = new PDO($dsn, $user, $pass, $options);
$stmt = $pdo->prepare("INSERT INTO users (username, password) VALUES (:username, :password)");
$stmt->execute([
    'username' => $username,
    'password' => $hashedPassword
]);
```

Пример использования с mysqli:
```php
$mysqli = new mysqli($host, $user, $pass, $db);
$stmt = $mysqli->prepare("INSERT INTO users (username, password) VALUES (?, ?)");
$stmt->bind_param("ss", $username, $hashedPassword);
$stmt->execute();
```

3. Фильтрация и очистка входных данных: всегда проверяйте и очищайте входные данные пользователей, используя, например, функции `filter_input()` или `filter_var()`.

4. Регулярные обновления и патчи: регулярно обновляйте вашу версию PHP и MySQL, устанавливайте все необходимые обновления безопасности.

5. Принцип наименьших привилегий: создайте пользователя базы данных с ограниченными правами, достаточными лишь для операций, необходимых для вашего PHP-скрипта.

6. Секретные и переменные окружения: храните конфиденциальную информацию, такую как параметры подключения к базе данных, в отдельном конфигурационном файле или переменных окружения вне документ-рута веб-сервера.

7. SSL/TLS: используйте шифрование соединений при передаче чувствительных данных между клиентом и сервером (например, ввод паролей пользователем).

Помните, что безопасность — это комплексный процесс, включающий в себя как технические меры, так и
Вангую: 
id -> autoinc + уникалный + ключевой
А Вы пытаетесь в него записать NULL

P.S. Попробуйте узнать что за ошибку возвращает база
Наверное таблица users входит в какую-то базу данных. Может сработать что-то типа use mydbname
Похожие вопросы