0

我喜欢为将由插入查询中的字段输入创建的文件创建一个特定的文件名。我喜欢有一个独特的钥匙。此键由一个 user_id、一个时间戳组成,在此结束时,应放置从触发的插入查询生成的 insert_id。它应该放在 auto_increment 号。在我生成的变量的末尾。所以问题是,我在插入查询触发之前创建了一个变量,以便该变量将成为插入查询的一部分,例如:

$get_num = $db->query("SELECT COUNT (*) FROM tableA");  
$num = $query->fetch_assoc();
$end = $num + 1;

$file_id = $id .".". time() .".". $end;

$insert = $db->query("INSERT INTO tableA ( file_id, a, b, c) VALUES('".$file_id."','".$a."','".$b."','".c."')");
4

2 回答 2

2

其实,忘记我之前写的。你不能指望COUNT为你工作,因为当一行被删除时会发生什么?您将有重复的值。对您来说最好的选择是首先创建行,获取 insert_id,然后UPDATE使用您之前描述的函数获取 file_id。

$uid = uniqid();
$insert = $db->query("INSERT INTO tableA ( file_id, a, b, c) VALUES('".$uid."','".$a."','".$b."','".c."')");

$file_id = $id .".". time() .".". mysql_insert_id();
$db->query("UPDATE tableA SET file_id='{$file_id}' WHERE file_id='{$uid}' LIMIT 1;");

最后,您仍然必须使用两个查询,所以它不会占用更多资源。另外,您不再进行COUNT手术。

在其他新闻中,请务必阅读 SQLi,具体取决于您的 a、b、c 变量的来源。

于 2012-04-06T17:53:43.670 回答
0

这是一个坏主意。进行插入,然后使用LAST_INSERT_ID。否则,正如@AuthmanApatira 指出的那样,您可能拥有错误的 ID。用于此的 PHP 是mysql_insert_id()

另请注意,如果您的索引列是 auto_increment,您甚至不需要担心 id;db 会为您处理它。您可以在查询运行后获取它。

于 2012-04-06T17:58:59.387 回答