测验 table 字段的索引基数是“2”,但它应该是“0”
index cardinality for quiz table field is '2', but should it be '0'
我有一个简单的测验系统,其中有一个测验 table 和 php 代码,用于将测验添加到数据库,包括每个测验的唯一 ID。在工作的数据库和程序中,我注意到索引基数是 0,而在似乎不工作的数据库中,我注意到索引基数是 2。
这是没有生成唯一quizid的原因,还是与代码有关?
例如,我创建了一个名为 testquiz 的测验,它应该生成 1、2、3 等的 id。
相反,它会产生这个:
然而,在可用的版本中,它会(正确地)生成一个唯一的 ID 和存储的测验 ID:
不工作基数如下所示:(此table的基数为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 and/or 未添加到数据库中,因此测验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 代码中还是在数据库设置中。
想法?解决方案?谢谢。
找到答案了。代码有错误,缺少参数:
$lastId = mysqli_insert_id($con);
使用上面的方法修复它。
您必须激活 "Auto-increment" 选项
激活后,每次插入新行时都会生成一个 uniqueId。
我有一个简单的测验系统,其中有一个测验 table 和 php 代码,用于将测验添加到数据库,包括每个测验的唯一 ID。在工作的数据库和程序中,我注意到索引基数是 0,而在似乎不工作的数据库中,我注意到索引基数是 2。
这是没有生成唯一quizid的原因,还是与代码有关?
例如,我创建了一个名为 testquiz 的测验,它应该生成 1、2、3 等的 id。
相反,它会产生这个:
然而,在可用的版本中,它会(正确地)生成一个唯一的 ID 和存储的测验 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 and/or 未添加到数据库中,因此测验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 代码中还是在数据库设置中。
想法?解决方案?谢谢。
找到答案了。代码有错误,缺少参数:
$lastId = mysqli_insert_id($con);
使用上面的方法修复它。
您必须激活 "Auto-increment" 选项 激活后,每次插入新行时都会生成一个 uniqueId。