mbxngtgo
@mbxngtgo
веб программист

Почему mysql не записывает данные если есть хоть одно одинаковое данное?

Столкнулся с проблемой.
Mysql не записывает в базу если есть хоть одно похожее данное вот код..

$host     = 'host'; // адрес сервера 
$database = 'name'; // имя базы данных
$user     = 'user'; // имя пользователя
$password = 'passw'; // пароль

// подключаемся к серверу
$link = mysqli_connect($host, $user, $password, $database) or die("Ошибка " . mysqli_error($link));

//mysqli_set_charset($link, 'utf8');

$login   = 'oleg33';
$password = '04bf6c984b760ed67e3a9f0b5d9b4cc7';
$email  = 'gggggf1';

$name_table = "users";

mysqli_query($link, "INSERT INTO `" . $name_table . "` (`login` , `password`, `email`) VALUES ('$login','$password','$email')");

mysqli_close($link);

В первый запуск все записывает .
Во второй запуск не записывает.

Потом меняю только логин тоже не записывает как заставить записать.К примеру люди вводят одинаковые пароли и если он есть в базе то данные не записываются?
  • Вопрос задан
  • 162 просмотра
Решения вопроса 1
LaRN
@LaRN
Senior Developer
Возможно у вас есть у таблицы users уникальный индекс например по полю email. Если так, то дубли при вставке либо вызывают ошибку, либо игнорируют я.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Я переписал твой код чтобы он был надёжным и безопасным

$host     = 'host';
$database = 'name';
$user     = 'user';
$password = 'passw';
$charset = 'utf8mb4'; // тоже важно!

// обязательно выставляем режим информирования об ошибках
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
// подключаемся к серверу
$link = mysqli_connect($host, $user, $password, $database);
// выставляем кодировку
$link->set_charset($charset);

$login   = 'oleg33';
$password = '04bf6c984b760ed67e3a9f0b5d9b4cc7';
$email  = 'gggggf1';

// пишем запрос, заменяя все переменне на знаки вопроса
// имя таблицы пишем прямо в запросе, делать его переменной нет ни имлейшего смысла
$sql = "INSERT INTO users (`login` , `password`, `email`) VALUES (?,?,?)");
// подготавливаем запрос
$stmt = $link->prepare($sql);
// привязываем к нему переменные
// сначала в кавычках пишем столько букв s сколько переменных, а потом сами переменные
$stmt->bind_param("sss",$login,$password,$email);
// выполняем запрос
$stmt->execute();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы