У меня есть простая система тестов, в которой есть таблица тестов и код 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 или в настройке базы данных.
Мысли? Решения? Спасибо.
Вы должны активировать опцию «Автоинкремент»
Когда вы активируете его, он будет генерировать уникальный идентификатор каждый раз, когда вы вставляете новую строку.
Нашел ответ. В коде произошла ошибка и отсутствовал параметр:
$lastId = mysqli_insert_id($con);
Используя вышеизложенное, исправили это.