php - 主键增加不有序

标签 php mysql

我有一个卡片名称列表和一个 php 文件插入卡片。当我插入一张卡并在数据库中删除它然后再次插入时。卡片删除后主键增加。例如:

Card number 1
Card number 2
Card number 3 --> if i delete this value and inserte again the primary key is 4 not 3 how to fix that problem ?

这是我的代码

    <?php
// this file show card name and picture
    include("connect.inc");
    $connect=mysqli_connect($host,$username,$password,$dbname) or die ("can't connect to server");
    $query="SELECT * FROM dragon ";
    $result=mysqli_query($connect,$query) or die("can't execute query");
    echo $_SESSION['count'];
    echo "<hr/>";

    while($row=mysqli_fetch_assoc($result))
    {
        extract($row);
        echo $type."<br/>";
        echo $CardName."/";
        echo $Description;
        echo "<br/>";
        echo "<a href='../dragon/{$picture}' border='0'> <img src='../dragon/{$picture}' border='0' width='300' height='300'/></a>";

        echo "<hr/>";

    }


    ?>

这个文件显示了插入表单

<?php
$labels=array("type"=>"type",
                "CardName"=>"Card Name",
                "Description"=>"Description",
                "atk"=>"Attack",
                "def"=>"Defend",
                "picture"=>"picture");

    echo "<form action='InsertCard.php' method='POST'>";
    echo "<h2>Insert new card </h2>";
    foreach($labels as $keys =>$values)
    {
        echo "$values <input type='text' name='$keys'/><br/>";
    }
    echo "<input type='submit'  value='insert new cards'/>";
    echo "<input type='submit' name='return' value='return'/>";
    echo "</form>";

?>

这个文件处理插入的文件

<?php
$labels=array("type"=>"type",
                "CardName"=>"Card Name",
                "Description"=>"Description",
                "atk"=>"Attack",
                "def"=>"Defend",
                "picture"=>"picture");

if(@isset($_POST['return']))
{
    header("Location:ShowCatalog.php");
}
include("connect.inc");
$connect=mysqli_connect($host,$username,$password,$dbname) or die("can't connect to server");

foreach($_POST as $keys =>$values)
{
    if(empty($values))
    {
        if($keys=='type' or $keys=='CardName' or $keys=='Description' or $keys=='picture')
        {
            $empty_values[]=$keys;
        }
    }
    else
    {
        if($keys=='type')
        {
            if(!preg_match("/^[A-Za-z -]{4,15}$/",$values))
            {
                $invalid_data[]=$keys;
            }
        }
        elseif($keys=='CardName')
        {
            if(!preg_match("/^[A-Za-z -]{4,30}$/",$values))
            {
                $invalid_data[]=$keys;
            }
        }
        elseif($keys=='Description')
        {
            if(!preg_match("/^[A-Za-z., -]{4,255}$/",$values))
            {
                $invalid_data[]=$keys;
            }
        }
        elseif($keys=="atk" or $keys=="def")
        {
            if(!preg_match("/^[0-9]{3,5}$/",$values))
            {
                $invalid_data[]=$keys;
            }
        }
        elseif($keys=='picture')
        {
            if(!preg_match("/^[A-Za-z -]{4,30}(.jpg)$/",$values))
            {
                $invalid_data[]=$keys;
            }
        }
        /*else
        {
            $clean_data[$keys]=trim(strip_tags($values));
        }*/
    }
}

if(@sizeof($empty_values)>0 or @sizeof($invalid_data)>0)
{
    if(@sizeof($empty_values)>0)
    {
    $join=join(", ",$empty_values);
    $msg="You forgot to input: $join<br/>";
    echo $msg;
    }
    if(@sizeof($invalid_data)>0)
    {
    $join=join(", ",$invalid_data);
    $msg="Invalid data: $join";
    echo $msg;
    }
    echo "<form action='$_SERVER[PHP_SELF]' method='POST'>";
    echo "<h2>Insert new card </h2>";
    foreach($labels as $keys =>$values)
    {
        echo "$values <input type='text' name='$keys'/><br/>";
    }
    echo "<input type='submit'  value='insert new cards'/>";
    echo "<input type='submit' name='return' value='return'/>";
    echo "</form>";
    exit();
}

foreach($_POST as $keys =>$values)
{
    $queried_data[$keys]=mysqli_real_escape_string($connect,trim(strip_tags($values)));
}
$check_existence="SELECT CardName FROM dragon WHERE CardName=";
foreach($queried_data as $keys =>$values)
{
    if($keys=="CardName")
    {
        $check_existence.="'".$values."'";
    }
}
$checking_result=mysqli_query($connect,$check_existence)or die("can't execute query ".mysqli_error($connect));
    if(mysqli_affected_rows($connect)>0)
    {
        echo "card is already existed !";
        include("ShowForm.php");
        exit();
    }
    else
    {
        $query="INSERT INTO dragon(";
        foreach($queried_data as $keys =>$values)
        {
            $query.=$keys.",";
        }
        $query.=")";
        $query=preg_replace("/\,\)/",")",$query);
        $query.="VALUES(";
        foreach($queried_data as $keys =>$values)
        {
            if($keys=="type" or $keys=="CardName" or $keys=="Description")
            {
                $values=ucfirst($values);
            }
            if($keys=="atk" or $keys=="def")
            {
                if(empty($values))
                {
                    $values='n/a';
                }
            }
            $query.="'".$values."',";   
        }
        $query.=")";
        $query=preg_replace("/\,\)/",")",$query);
        $result=mysqli_query($connect,$query);
        echo "card is inserted !";
    }
?>

最佳答案

这是预期的行为,换句话说,这就是现在 AI 的工作方式。不要指望 ID 是连续的,您应该自己跟踪它以备不时之需。当你用 mysqli 完成插入时,你可以在查询完成后获取“插入 ID”,如果你以后需要它以供引用。

有关获取插入 ID 的更多信息,请参阅: http://www.php.net/manual/en/mysqli.insert-id.php

关于php - 主键增加不有序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20825565/

相关文章:

php - 检查 Laravel 中是否存在唯一索引键

mysql - 我如何优化其中包含多个 NOT LIKE 语句的 AND?

php - Mysql 函数 : Insert if not exist or updated

php - Laravel 5 添加条件子句查询

php - 选择在给定日期得分最高的用户

javascript - 将变量从 JavaScript 传递到 PHP 并重新加载 DIV/iframe

php - PHP 中的定时任务(类似 cron)

PhpStorm 和 PSR-12,如何将其添加为默认编码样式?

sql - 如何使用 MySQL 计算每日价格变化的最高百分比?

php - 如何合并两个具有相同字段但数据不重复的数据库?