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

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

Вызывает ли это отсутствие генерации уникальной викторины или это как-то связано с кодом?

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

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

введите описание изображения здесь

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

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

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.'');
}
?>

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

В моей версии программы, которая работает, идентификатор теста генерируется и добавляется правильно, но эта версия включала несуществующие функции 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

Решение

Вы должны активировать опцию «Автоинкремент»
Когда вы активируете его, он будет генерировать уникальный идентификатор каждый раз, когда вы вставляете новую строку.

1

Другие решения

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

$lastId = mysqli_insert_id($con);

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

0