INSERT INTO和主键,自动增量字段和默认值

时间:2012-01-05 16:56:35

标签: php mysql

我正在使用MySQL数据库开发PHP Web应用程序。

我想知道在插入后找出行接收的主键(或任何其他自动增量字段)的最佳方法是什么。

返回完整行的结果也非常好,因为我还想了解分配给我没有明确设置的字段的默认值。

感谢所有帮助。

- 编辑

所以,我正在使用一个内部框架来抽象出实际的数据库函数,所以我不能使用特定于连接的“mysql_last_insert_id”,并且“select last_insert_id”查询AFAIK会受到影响其他数据库连接,特别是考虑到我正在使用的框架为每个查询打开新连接。

猜猜这是一个框架问题,你无法帮助我。但是,如果INSERT INTO有一个“返回插入行”模式,那就太好了。

3 个答案:

答案 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()。如果您想要默认行的值,则必须使用键选择它们。