【发布时间】: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 像这样:
我该如何解决这个问题?
【问题讨论】:
-
看起来您的某些插入失败了。因此,您的自动增量字段仍会增加,但不会插入新记录。
-
您为什么认为这是个问题?自动增量保证
uniqueId 值,不是consecutiveId 值 -
SQL::ACTION是什么,为什么您的查询不是 properly escaping?如果不创建 severe SQL injection bugs,就不能将任意用户数据放入查询中。 -
你也可以使用 MAX() 函数(如果你认为在这种情况下有用的话),描述here
-
@tadman 看起来他的包装器确实使用了准备好的查询。请参阅两个查询中的
?占位符。