2013-07-15 1 views
3

내가 어떤 문제PHP에서 저장 프로 시저를 통해 LAST_INSERT_ID을 얻는 방법을

$resultUsp = mysql_query($query) or die("Error: " . mysql_error()); 
없이 PHP에서이 호출 할 수 있습니다

-- ---------------------------- 
-- Table structure for user_basic_info 
-- ---------------------------- 
DROP TABLE IF EXISTS `user_basic_info`; 
CREATE TABLE `user_basic_info` (
    `user_id` int(11) NOT NULL AUTO_INCREMENT, 
    `user_email` varchar(250) DEFAULT NULL, 
    `user_password` text, 
    `user_first_name` varchar(200) DEFAULT NULL, 
    `user_last_name` varchar(200) DEFAULT NULL, 
    `user_dob` date DEFAULT NULL, 
    `user_creation_time` datetime DEFAULT NULL, 
    PRIMARY KEY (`user_id`), 
    UNIQUE KEY `user_email` (`user_email`) 
) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=latin1; 

-- ---------------------------- 
-- Procedure structure for usp_insert_user_basic_info 
-- ---------------------------- 
DROP PROCEDURE IF EXISTS `usp_insert_user_basic_info`; 
DELIMITER ;; 
CREATE DEFINER=`root`@`localhost` PROCEDURE `usp_insert_user_basic_info`(IN `user_first_name` varchar(200),IN `user_last_name` varchar(200),IN `user_password` text,IN `user_dob` date,IN `user_email` varchar(250)) 
BEGIN 
    #Routine body goes here... 
    INSERT INTO `nuclear`.`user_basic_info` (
    `user_email` , 
    `user_password` , 
    `user_first_name` , 
    `user_last_name` , 
    `user_dob`, 
    `user_creation_time` 
    ) 
    VALUES (
     user_email, user_password, user_first_name, user_last_name, user_dob,NOW() 
    ); 
SELECT LAST_INSERT_ID() ; 

END 
;; 
DELIMITER ; 

아래와 같이 MySQL의에서 저장 프로 시저가 있다고 가정 해

하지만 각 성공적으로 삽입 1을 반환합니다. 나는 1 열 영향을 받았다고 말하는 것 같아!

는 내가 그것을 LAST_INSERT_ID

어떻게 그것을 할 반환하려면? 내가 어떤 OUT 매개 변수를 추가하지 않으 그런데 . 0

+0

은'user_basic_info' 표는 실제로 ['AUTO_INCREMENT'] (HTTP와 열이 있습니까 .com/doc/ko/example-auto-increment.html) 속성? – eggyal

+0

예. 자동 AUTO_INCREMENT –

+0

당신은 사용자 ID 내림차순 제한 (1)에 의해 순서 user_basic_info에서 선택 사용자 아이디를하려고 노력 적이 있습니까? 그게 당신에게 정확한 이드를 줄 수 있는지 보려고? 당신이있는 경우 –

답변

9

당신은 SP에서 다음과 같이 마지막으로 삽입 ID를 얻을 수 반환에 mysql_insert_id : //dev.mysql :

DECLARE LID int; 

SET LID = LAST_INSERT_ID(); 
+0

http://dev.mysql.com/doc/refman/5.7/en/information-functions.html LAST_INSERT_ID()는 BIGINT UNSIGNED (64 비트), 그래서 그는해야 : DECLARE의 LID BIGINT UNSIGNED; 대신 데이터 오버플로를 방지하기 위해 – Benas

관련 문제