【问题标题】:auto increment not work in PHP ignore method自动增量在 PHP 忽略方法中不起作用
【发布时间】:2015-03-27 20:45:51
【问题描述】:

我使用 PHP 忽略方法将数据插入 MySQL,如下所示:

if (count($_POST['tags']) > 0)
{
    $tags = explode(',', $_POST['tags']);
    $quoted_tags = array_map(
        function ($x)
        {
            return "'$x'";
        },
        $tags);
    $string = implode(',', $quoted_tags);
    SQL::ACTION("DELETE FROM " . NEWS_TAGS . " WHERE article = ? AND name NOT IN (" . $string . ") ", $id);
    $arr_tag = explode(",", $_POST['tags']);
    foreach($arr_tag as $tag)
    {
        $id = $_GET['id'];
        SQL::ACTION("INSERT IGNORE INTO " . NEWS_TAGS . " (article, name, type) VALUES (?, ?, ?)", $id, $tag, "news");
    }
}

这行得通但是在 MySQL 表中,每个自动增量 id 之间是 4 像这样:

我该如何解决这个问题?

【问题讨论】:

  • 看起来您的某些插入失败了。因此,您的自动增量字段仍会增加,但不会插入新记录。
  • 您为什么认为这是个问题?自动增量保证 unique Id 值,不是 consecutive Id 值
  • SQL::ACTION 是什么,为什么您的查询不是 properly escaping?如果不创建 severe SQL injection bugs,就不能将任意用户数据放入查询中。
  • 你也可以使用 MAX() 函数(如果你认为在这种情况下有用的话),描述here
  • @tadman 看起来他的包装器确实使用了准备好的查询。请参阅两个查询中的 ? 占位符。

标签: php mysql


【解决方案1】:
ALTER TABLE tbl AUTO_INCREMENT = 1;

在你的 php myadmin 中,运行这个 sql 语句,其中“tbl”是表名

【讨论】:

    【解决方案2】:

    您需要更改您的表并将AUTO_INCREMENT 设置为 1,其次,如果您还没有这样做,您应该将您的 id 列设置为主键。

    http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html http://dev.mysql.com/doc/refman/5.5/en/optimizing-primary-keys.html

    【讨论】:

    • 尽可能尝试链接最新版本的文档。我知道甲骨文的网站是个烂摊子,而且经常提供错误的版本,但很容易调整 URL 以更正它。 MySQL 5.6 是当前的稳定版本。
    猜你喜欢
    • 2015-11-22
    • 2013-05-25
    • 2023-03-21
    • 1970-01-01
    • 2020-03-30
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多