Индекс кардинальности для поля таблицы теста равен '2', но должно быть '0'

0

У меня есть простая система викторин, в которой есть таблица викторины и код php, написанные для добавления к базе данных викторины, включая уникальный идентификатор для каждой викторины. В базе данных и программе, которые работают, я замечаю, что размерность индекса равна 0, и в базе данных, которая, похоже, не работает, я замечаю, что показатель составляет 2.

Является ли это причиной отсутствия генерации уникального quizid, или это имеет какое-то отношение к коду?

Например, я создаю викторину testquiz, она должна генерировать идентификатор 1,2,3 и т.д.

Вместо этого он производит это:

Изображение 174551

Однако в версии, которая работает, она производит (правильно) уникальный идентификатор id и quiz, который хранится:

Изображение 174551 Не работает. Кардинальность, показанная ниже: (эта таблица имеет мощность 2, и при запуске кода генерируется уникальный идентификатор quiz)

Action  Keyname Type    Unique  Packed  Column  Cardinality Collation   Null    Comment
Edit Edit   Drop Drop   PRIMARY BTREE   Yes No  id  2   A   No

Это, однако, работает:

Action  Keyname Type    Unique  Packed  Column  Cardinality Collation   Null    Comment
Edit Edit   Drop Drop   PRIMARY BTREE   Yes No  id  0   A   No  

MySQL автоматически генерирует мощность, поэтому я предполагаю, что не могу его изменить? ЕСЛИ это проблема, что можно сделать?

Иначе, если код является проблемой, может кто-то указать, в чем проблема:

Код для добавления новой викторины

<?php

    include('scripts/connect_db.php');

        if(isset($_POST['quizName']) && $_POST['quizName'] != ""
        && isset($_POST['quizTime']) && $_POST['quizTime'] != ""
        && isset($_POST['numQues']) && $_POST['numQues'] != ""){

            $qName=mysqli_real_escape_string($con,$_POST['quizName']);
            $qTime=mysqli_real_escape_string($con,$_POST['quizTime']);
            $nQues=mysqli_real_escape_string($con,$_POST['numQues']);

            $qTime = preg_replace('/[^0-9]/', "", $qTime);
            $nQues = preg_replace('/[^0-9]/', "", $nQues);

            $fetch=mysqli_query($con,"SELECT id FROM quizes 
                                WHERE quiz_name='$qName'")or die(mysqli_error());
            $count=mysqli_num_rows($fetch);
            if($count!="")
            {
                $user_msg = 'Sorry, but \ '.$qName.' \ already exists!';
                header('location: admin.php?msg='.$user_msg.'');
            }else{
                mysqli_query($con,"INSERT INTO quizes (quiz_name, display_questions, time_allotted) 
                    VALUES ('$qName','$nQues','$qTime')")or die(mysqli_error());

                $lastId = mysqli_insert_id();
                mysqli_query($con,"UPDATE quizes SET quiz_id='$lastId' 
                                WHERE id='$lastId' LIMIT 1")or die(mysqli_error());

                $user_msg = 'Quiz, \ '.$qName.' \ has been created!';
                header('location: admin.php?msg='.$user_msg.'');
            }
        }else{
            $user_msg = 'Sorry, but Something went wrong';
            header('location: admin.php?msg='.$user_msg.'');
        }
?>

Подводя итог, основная проблема заключается в том, что при запуске кода для добавления новой викторины уникальный идентификатор опроса не создается и/или не добавляется в базу данных, поэтому идентификатор quiz всегда равен 0.

В моей версии программы, которая работает, идентификатор quiz генерируется и добавляется правильно, но в эту версию включены несуществующие функции MySQL.

Предыдущий исходный код работает правильно (но с использованием несуществующего MySQL):

<?php

    include('scripts/connect_db.php');

        if(isset($_POST['quizName']) && $_POST['quizName'] != ""
        && isset($_POST['quizTime']) && $_POST['quizTime'] != ""
        && isset($_POST['numQues']) && $_POST['numQues'] != ""){

            $qName=mysql_real_escape_string($_POST['quizName']);
            $qTime=mysql_real_escape_string($_POST['quizTime']);
            $nQues=mysql_real_escape_string($_POST['numQues']);

            $qTime = preg_replace('/[^0-9]/', "", $qTime);
            $nQues = preg_replace('/[^0-9]/', "", $nQues);

            $fetch=mysql_query("SELECT id FROM quizes 
                                WHERE quiz_name='$qName'")or die(mysql_error());
            $count=mysql_num_rows($fetch);
            if($count!="")
            {
                $user_msg = 'Sorry, but \ '.$qName.' \ already exists!';
                header('location: admin.php?msg='.$user_msg.'');
            }else{
                mysql_query("INSERT INTO quizes (quiz_name, display_questions, time_allotted) 
                    VALUES ('$qName','$nQues','$qTime')")or die(mysql_error());

                $lastId = mysql_insert_id();
                mysql_query("UPDATE quizes SET quiz_id='$lastId' 
                                WHERE id='$lastId' LIMIT 1")or die(mysql_error());

                $user_msg = 'Quiz, \ '.$qName.' \ has been created!';
                header('location: admin.php?msg='.$user_msg.'');
            }
        }else{
            $user_msg = 'Sorry, but Something went wrong';
            header('location: admin.php?msg='.$user_msg.'');
        }
?>

Я не могу определить ошибку или указать, находится ли ошибка в php-коде или в настройке базы данных.

Мысли? Решения? Спасибо.

  • 0
    структура базы данных и показанные таблицы (для рабочих и не рабочих таблиц)
  • 0
    Отметьте базы данных, которые вы используете. (Очень специфичный для продукта вопрос.)
Показать ещё 5 комментариев
Теги:
mysqli
cardinality

2 ответа

1

Вы должны активировать опцию "Auto-increment". Когда вы ее активируете, каждый раз, когда вы вставляете новую строку, будете генерировать уникальный идентификатор.

0

Нашел ответ. Код имел ошибку и отсутствовал параметр:

$lastId = mysqli_insert_id($con);

Используя вышеизложенное, зафиксируйте его.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню