mysql - 运行后直接从插入查询中获取数据

标签 mysql

我有一个数据库,我使用 php 将项目插入其中。我想获取自动递增列的 ID,我阅读了手册,它说 mysql_query 返回资源变量而不是 bool 值,有没有办法从该资源中检索数据?

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

第一个字段是我感兴趣的ID字段。
我尝试了 mysql_fetch_assoc 和 mysql_result 函数将 $res 转换为数组或直接检索数据,就像我对 SELECT 查询所做的那样,但没有成功。 有什么建议吗?

最佳答案

参见手册: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 是确定性的,因此假设您有一个散列的原始 key 字符串,您应该能够使用该 MD5 表达式和原始字符串检索行。

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

关于mysql - 运行后直接从插入查询中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16500669/

相关文章:

mysql - 优化 MySQL 查询删除子查询

mysql - 左连接乘法值

php - 错误号 : 1064

mysql - 在mysql联合查询中插入序列号

mysql打印日期之间的数据

php - 在使用 Paginator 的查询中组合聚合字段(group by)和排序(order by)时,Doctrine 会生成不正确的 SQL

mysql - 在 IN 查询(​​子查询)上选择另一列

java - 我的查询中的 sql 语法错误

mysql - Concat/内连接 MySQL

php - Mysqli Raspberry Pi 3 没有任何错误