2013-05-11 40 views
1

我有一个数据库我插入项目使用PHP。我想获得自动增量列的ID,我阅读手册,它说,mysql_query返回资源变量而不是布尔值,有没有什么办法从资源中检索数据?运行后直接从插入查询中获取数据

echo $query_ins = "INSERT INTO `house` VALUES ('' , '$city', '$street', 'num'); 
$res = mysql_query($query_ins); 

的第一个字段是ID字段我感兴趣的。
我尝试mysql_fetch_assoc和mysql_result功能到$资源转换成数组或检索数据直接像我将与SELECT查询,但没有更迭做。 有什么建议吗?

+0

不推荐使用mysql扩展。你应该使用PDO,或者至少使用mysqli。您可以从插入语句中获得最后一个插入ID,即 – 2013-05-11 19:15:52

+0

。对于更多的数据,你需要运行一个选择语句 – Aris 2013-05-11 19:18:34

回答

1

参见手册:mysql_insert_id — Get the ID generated in the last query

这真是你应该已经能够自己找到轻松,没有张贴到StackOverflow上。查阅您使用的任何API的文档对您有利。


回复您的评论:

SELECT * FROM house WHERE id = LAST_INSERT_ID() 

此假设你有一个自动递增的主键。

如果您在插入时生成一个不确定的主键值,例如使用RAND()或UUID(),那么实际上无法检索生成的值。您应该在执行INSERT之前生成该值,因此您可以使用该值来查找该行。

SET @r := RAND(); 
INSERT INTO house (id, ...) VALUES (@r, ...); 
SELECT * FROM house WHERE id = @r; 

MD5是确定性的,所以假设您有散列原始密钥字符串,你应该能够检索使用MD5表达和原始字符串的行。

INSERT INTO house (id, ...) VALUES (MD5('xyzzy'), ...); 
SELECT * FROM house WHERE id = MD5('xyzzy'); 
+0

嗨,谢谢你的回答,在这种情况下,id真的是我想要的,但总的来说有什么办法从该资源中检索数据?可以说我有一个随机字段或者当我插入数据时生成一个MD5代码 – 2013-05-11 19:12:36

+0

嘿,Bill,我见过一些在PHP中使用'@'以及SQL,有什么特别的含义?我想在PHP中它可以防止警告? – 2013-05-11 19:20:40

+0

'@'运算符可以抑制PHP中的错误。 http://php.net/manual/en/language.operators.errorcontrol.php这通常不被认为是抑制错误的好习惯。你应该解决错误的根本原因,而不是在地毯下面扫地。 – 2013-05-11 19:21:28