2013-12-11 2 views
0

나는 다시 여기에 있는데, 나는 미쳐 가고있다! 나는이 저장 프로 시저가 : 내가 마지막으로 삽입 된 ID를 얻을 수있는 방법마지막으로 삽입 한 행의 마지막 삽입 ID 가져 오기

CREATE DEFINER=`root`@`localhost` PROCEDURE `aggiungi_categoria`(IN `id_categoria_principale` INT, IN `nome_categoria` VARCHAR(150), IN `sigla_categoria` VARCHAR(10), IN `stato_categoria` INT) NOT DETERMINISTIC MODIFIES SQL DATA SQL SECURITY DEFINER 
begin 

select @rgt := rgt,@lft := lft from categorie where id = id_categoria_principale; 

if @rgt - @lft = 1 then 

UPDATE categorie SET rgt = rgt + 2 WHERE rgt > @lft; 
UPDATE categorie SET lft = lft + 2 WHERE lft > @lft; 

insert into categorie (nome,sigla,stato,lft,rgt) 
values(nome_categoria,sigla_categoria,stato_categoria,@lft+1,@lft+2); 

ELSE 

UPDATE categorie SET rgt = rgt + 2 WHERE rgt > @rgt-1; 
UPDATE categorie SET lft = lft + 2 WHERE lft > @rgt-1; 

insert into categorie (nome,sigla,stato,lft,rgt) values 
(nome_categoria,sigla_categoria,stato_categoria,@rgt,@rgt+1); 

end if; 


end 

을 ??? 나는 밖으로 param 또는 테이블 (또는 "last_id last_insert_id()"설정 최대 (ID) 선택을 수행했지만 PHP 통해 얻는 방법을 모르겠다?

내가

@rgt:=number,@lft:=number2 

같은 것을 받고 있어요 및 PHP에서 분명 내가 배열에서 같은 결과를 얻을 phpMyAdmin에있는 프로 시저 호출

.

무엇이 잘못 되었나요?

+2

PHP에서 mysql_insert_id()가 작동하지 않습니까? (또는 MySQLi를 사용하는 경우'$ mysqli-> insert_id') –

+0

MySQL 데이터베이스입니까? 그렇다면, mysql, mysqli, pdo 등 어떤 확장자를 사용하고 있습니까? –

+0

@MartinMajer 나는 last_id에 select last_insert_id() 나 set last_id = last_insert_id()와 같이 프로 시저가 끝날 때 직접 사용했다. 여기서 last_id는 out 매개 변수이다. –

답변

0

확인 그것을 해결! 난 실행 PHP에서

select last_insert_id() into last_id; 

:

$db -> execQuery('call aggiungi_categoria('.$parametri['id_categoria_principale'].',"'.$parametri['nome'].'","'.$parametri['sigla'].'",'.$parametri['stato'].',@lastId);'); 

최종적

$lid = $db ->execQuery('select @lastId;'); 
1

mysql_insert_id‎을 사용하여 마지막 insert 문에 대한 ID를 가져올 수 있어야합니다.
참조 : http://php.net/mysql_insert_id

그러나 mysql_* 기능, 현재 사용되지 않습니다 (아래를 참조) 당신이 동등한 mysqli_* 함수 나 방법을 사용해야합니다. 위의 함수에 대한 동등한은 다음과 같습니다 $mysqli->insert_id()
참조 : http://www.php.net/manual/en/mysqli.insert-id.php

기능의 mysql_* 카테고리가 사용되지 않습니다 및 경고가 여기에 재현 :

이 확장은 PHP 5.5로 사용되지 않습니다. 0, 그리고 앞으로 에서 제거됩니다. 대신 MySQLi 또는 PDO_MySQL 확장자 을 사용해야합니다. 자세한 내용은 MySQL: choosing an API 가이드 및 related FAQ을 참조하십시오. 이 기능의 대안은 포함

+0

네, 죄송합니다. 저는 mysqli를 사용하고 있다고 말하고 싶습니다. $ mysqli-> insert_id()를 반환하는 db 클래스에 함수가 있지만, t 작업, 결과 0. 대신 삽입 쿼리 (호출 프로 시저없이) 작동 할 때 –

+0

@MarcoC 아래에서 내 대답을 보면, 나는 당신을 도울 것이라고 생각합니다. –

+0

@RossWilson 감사합니다,하지만 제 경우에는 프로 시저 내부에 "삽입"을 사용하기 때문에 작동하지 않습니다. 그래서 나는 둘 다 시도 (이 경우) 내 대답은 올바른 것입니다. 그러나 귀하의 대답은 정확하지만 귀하가 제안한대로 삽입 명령을 실행하면됩니다. –

1

는 난이 문을 포함 종료 태그 전에 last_id라는 INT 출력 파라미터 추가

당신이 MySQLi를 사용한다면 당신은 다음과 같은 것을 가질 것입니다.

절차 :

$link = mysqli_connect($db_host, $db_user, $db_pass, $db_table); 

$query = "INSERT INTO table VALUES($val, $val2, $val3)"; 
mysqli_query($link, $query); 
$id = mysqli_insert_id($link); 

OOP :이 도움이

$mysqli = new mysql($db_host, $db_user, $db_pass, $db_table); 

//query 
$id = $mysqli->insert_id; 

희망!

문제가 있으면 알려주세요.

관련 문제