2012-04-06 63 views
0

我喜欢为将通过插入查询中的字段输入而创建的文件创建特定的文件名。我喜欢有一个独特的关键。这个关键字由一个user_id和一个时间戳组成,并且在这个结尾处,它应该被放置在来自insert插入查询的生成的insert_id中。应该放置auto_increment no。为我生成的变量的结尾。所以问题是,我创建了一个变量之前插入查询解雇,使这个变量将是插入查询等的一部分:如何在插入查询前在变量中获取insert_id

$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."')"); 

回答

2

其实,忘了我以前写的。你不能指望COUNT为你工作,因为当一行被删除时会发生什么?你将会有重复的值。对你来说最好的选择是首先创建该行,获取insert_id,然后使用前面描述的函数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变量来自哪里。

0

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

另请注意,如果您的索引列是auto_increment,那么您甚至不需要担心该id;数据库为你照顾它。你可以在你的查询运行后得到它。