我正在使用MySQL数据库开发PHP Web应用程序。
我想知道在插入后找出行接收的主键(或任何其他自动增量字段)的最佳方法是什么。
返回完整行的结果也非常好,因为我还想了解分配给我没有明确设置的字段的默认值。
感谢所有帮助。
- 编辑
所以,我正在使用一个内部框架来抽象出实际的数据库函数,所以我不能使用特定于连接的“mysql_last_insert_id”,并且“select last_insert_id”查询AFAIK会受到影响其他数据库连接,特别是考虑到我正在使用的框架为每个查询打开新连接。
猜猜这是一个框架问题,你无法帮助我。但是,如果INSERT INTO有一个“返回插入行”模式,那就太好了。
答案 0 :(得分:4)
MySQL提供了一种方便的方法来回答这个问题:
mysql> SELECT LAST_INSERT_ID()
mysql_*
函数带有一个包装器:check mysql_insert_id
PDO的mysql驱动程序提供了相同的内容:
$pdo->exec('insert into ...');
$lastId = $pdo->lastInsertId();
答案 1 :(得分:2)
试试这个
MySQL代码:
CREATE TABLE IF NOT EXISTS `mytable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`member` int(11) NOT NULL,
`update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`created` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
SHOW: 的 AUTO_INCREMENT 强>
MySQL插入:
INSERT INTO mytable (`id`,`name`,`update`,`created`) values (NULL,'TEST',NOW(),NOW());
OR
INSERT INTO mytable (`name`,`update`,`created`) values ('TEST',NOW(),NOW());
OR
INSERT INTO mytable (`name`,`created`) values ('TEST',NOW());
PHP MySQL代码:
<?php
$foo = 'test';
mysql_query("INSERT INTO mytable (`name`,`created`) values ('".mysql_real_escape_string( $foo )."',NOW())");
// GET LAST ID
$id = mysql_insert_id();
?>
在PHP中使用MYSQL_REAL_ESCAPE_STRING
mysql_real_escape_string( string )
请参阅此文档mysql_real_escape_string
再见!!
答案 2 :(得分:0)
如果您使用的是mysql_*
个功能,则可以使用mysql_insert_id()
。如果您想要默认行的值,则必须使用键选择它们。