我正在开发一个使用MySQL数据库的PHP应用程序。
我想知道什么是最好的方法来找出主键(或任何其他自动增量字段)在插入后接收到的行。
返回整行的结果也很不错,因为我还想知道分配给未显式设置的字段的默认值。
感谢所有的帮助。
--编辑
因此,我使用的是一个内部框架,它抽象了实际的数据库功能,所以我不能使用特定于连接的"mysql_last_insert_id",而"select last_insert_id“查询AFAIK会受到其他数据库连接的影响,特别是考虑到我使用的框架会为每个查询打开新的连接。
我猜这是一个框架问题,你帮不了我。不过,如果INSERT INTO有“返回插入的行”模式,那就更好了。
发布于 2012-01-06 01:01:44
MySQL提供了一种方便的方法来回答这个问题:
mysql> SELECT LAST_INSERT_ID()mysql_*函数附带了一个包装器: check mysql_insert_id
用于PDO的mysql驱动程序提供了相同的功能:
$pdo->exec('insert into ...');
$lastId = $pdo->lastInsertId();发布于 2012-01-06 01:10:29
尝尝这个
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;AUTO_INCREMENT
Show.
MySQL Insert:
INSERT INTO mytable (`id`,`name`,`update`,`created`) values (NULL,'TEST',NOW(),NOW());或
INSERT INTO mytable (`name`,`update`,`created`) values ('TEST',NOW(),NOW());或
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
再见!!
发布于 2012-01-06 00:58:56
如果您正在使用mysql_*函数,那么您可以简单地使用mysql_insert_id()。如果您想要缺省行的值,则必须使用键选择它们。
https://stackoverflow.com/questions/8746416
复制相似问题