测验表字段的索引基数为“2”,但是否应为“0”

wvyml7n5  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(398)

我有一个简单的测验系统,其中有一个测验表和php代码,用于将测验添加到数据库中,包括每个测验的唯一id。在运行的数据库和程序中,我注意到索引基数是0,在似乎不工作的数据库中,我注意到索引基数是2。
这是导致缺少唯一quizid的原因,还是与代码有关?
例如,我创建了一个名为testquick的测验,它应该生成一个id为1、2、3等的测验。
相反,它产生了:

但是,在正常工作的版本中,它会(正确地)生成一个唯一的id和测验id,该id存储在:

不工作基数如下所示:(此表的基数为2,运行代码时不会生成唯一的测验id)

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

总而言之,主要问题是,当运行代码以添加新测验时,没有生成唯一的测验id和/或没有将其添加到数据库中,因此测验id始终为0。
在我的程序版本中,测试id是正确生成和添加的,但是该版本包含了失效的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代码中还是在数据库设置中。
思想?解决?谢谢您。

vsikbqxv

vsikbqxv1#

你必须激活“自动递增”选项,当你激活它,将生成一个唯一的ID每次你插入一个新行。

muk1a3rh

muk1a3rh2#

找到了答案。代码有错误,缺少参数:

$lastId = mysqli_insert_id($con);

使用上述方法,修复它。

相关问题