TimurWiFi
@TimurWiFi

PHP не создаёт запись MySQL, ошибки не выводит, что делать?

Почему то PHP скрипт не создаёт запись в таблицу MySQL.

Я много раз перепроверял скрипт, "вроде бы" всё правильно, он даже ошибку при выполнении не выводит!
error.log пустой

А когда я выполняю эту же функцию в phpmyadmin, он успешно выполняется
С соединением к MySQL проблем нет, пароль и имя таблицы правильны

▶Скрипт PHP◀
<?php
    session_start();
    require_once 'connect.php';

    $username = $_POST['username'];
    $password = hash('haval256,5', $_POST['password']);
    $password_confirm = hash('haval256,5', $_POST['password_conf']);
    $email = $_POST['email'];
    $profile_image = $_FILES['avatar']['tmp_name'];

      if($password != $password_confirm){
        
        $_SESSION['message'] = 'Пароли не совпадают!';

        header('Location: ../register.php');
      }else{
        // ok...
      }

      if($username == "" || $password == ""){
        $_SESSION['message'] = 'Заполните все поля!';

        header('Location: ../register.php');
      }else{

            $check_user = mysqli_query($connect, "SELECT * FROM `users` WHERE `username` = '$username'");
          if(mysqli_num_rows($check_user) == 1){
            $_SESSION['message'] = 'Этот ник уже занят!';

              header('Location: ../register.php');
          }else{
            $rand1 = "avatars/".rand(1000000000, 9999999999).".png";
            
            move_uploaded_file($profile_image, "../".$rand1);
            
           // Проблемный скрипт <<<<<<<<

            $create_table = mysqli_query($connect, "INSERT INTO `users`(`id`, `username`, `email`, `password`, `plan`, `banned`, `avatar`, `subscribers`, `status`, `used_plan`) VALUES (NULL, '$username', '$email', '$password', 3, 'no', '$rand1', 0, 'surfer', 3)");
          
        
          $_SESSION['message'] = 'Регистрация прошла успешно';

          
          }

      }
?>


Структура таблицы:
62bae392d61dc663754262.png
  • Вопрос задан
  • 254 просмотра
Решения вопроса 2
SagePtr
@SagePtr
Еда - это святое
Ответ написан
Комментировать
@Akina
Сетевой и системный админ, SQL-программист.
No index used in query/prepared statement ...

что это означает?

Это означает, что, по мнению PHP/mysqli, нет подходящего индекса для обработки запроса, сервер будет шерстить всю таблицу, что неэффективно. В общем, он просто старается сделать тебя счастливым (твоё мнение при этом никого не интересует).
Возможные решения:
1. Создать индекс users (username)
2. Изменить настройки mysqli_report() (см. ответ SagePtr)

без неё обойтись нельзя, т.к. одинаковые ники будут вызывать ошибки в некоторых уголках сайта
что делать?

Тогда альтернатив вообще нет.

Создать уникальный индекс users (username).

После этого код с проверкой на существование можно смело выбросить (дубликат в принципе не будет записываться сервером). Но обязательно добавить код для обработки ошибки дублирования при добавлении.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019
Bigdata Engineer
mysqli_query возвращает статус ошибки. Посмотри вот как тут пишут https://www.php.net/manual/ru/mysqli.query.php

И сделай проверки результата.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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