2014-11-07 5 views
0

나는 새로운 암호 요청 기능을 건물입니다 후 전체 행을 얻을 목적으로 나는 3 개 필드 user_id, coderequested 구성 users_forgotpasscodes라는 별도의 테이블을 만들었습니다. 코드는 사용자의 이메일로 전송되며 1 일 유효합니다. 사용자 테이블에 여분의 열을 만드는 대신 별도의 테이블을 사용하기로 결정했기 때문에이 기능을 사용하는 사용자가 거의 없을 것이라고 생각하기 때문에 모든 사용자가 사용하지 않을 속성을 가질 수는 없습니다 .PDO는 삽입

어쨌든 제가 우연히 것은 이런 것입니다 자신의 이메일 주소를 사용자가 갈 때 페이지 "비밀번호를 잊어 버렸습니다"는이다 유입

self::$db->prepare("INSERT INTO users_forgotpasscodes (id, code, requested) VALUES ((SELECT id FROM users WHERE email = ?), '{$code}', NOW())")->execute([$data['email']]) 

문제는 내가 더 아래 코드에서 내가 필요로한다는 것입니다 받은 편지함에서 올바른 페이지로 정확하게 이동할 수 있도록 사용자의 ID를 입력하여 새 비밀번호를 만듭니다.

내 질문에 다른 선택 쿼리를 만들지 않고 삽입 한 전체 행을 검색 할 수 있습니까?

까다로운 부분은 코드 테이블에서 열 id 한 사용자가 이러한 성격의 여러 요청을 보낼 수 있기 때문에 그냥 평범한 인덱스 기본 키 때문에 내가 lastInsertId()를 사용할 수 없다는 내가 계속 할 수 있도록하려면 그 (것)들의 대위.

+1

? 'ID' 열만 반환 하시겠습니까? – Rahul

+0

@Rahul 예 기본적으로 전체 행을 얻는 방법을 찾으면 ID를 얻을 수 있습니다.이 제목을 사용하면 'lastInsertId'와 혼동을 피할 수 있으며 누군가가이 항목을 검색하는 경우 찾기 쉽습니다. –

답변

2

마지막으로 삽입 한 행의 ID 열 (auto_increment 필드가 아님)을 반환하려는 것으로 보입니다.

그런 경우 저장 프로 시저를 통해 INSERT 작업을 수행하고 OUTPUT 매개 변수를 사용하여 ID 값을 가져옵니다. 그런 다음 응용 프로그램 코드에서 동일하게 사용할 수 있습니다.

DELIMITER $$ 
CREATE PROCEDURE sp_Insert(
IN col1 VARCHAR(25), 
IN col2 VARCHAR(10), 
IN email VARCHAR(30), 
OUT ret_ID INT) 
BEGIN 
INSERT INTO your_table(ID,col1,col2) VALUES(ID,col1,col2); 

SELECT ID INTO ret_ID FROM your_table where Email = email; <-- assign here 
END$$ 
DELIMITER ; 

아래 샘플 코드는 응용 프로그램 코드에서 프로 시저를 호출하고 가져 당신이`전체 row` 뜻은 무엇 ret_ID

CALL sp_Insert(1, 'blah', 'blah blah', @ret); 

SELECT @ret; 
+0

당신은 나에게 시간을 절약 할 수 있습니다. 프로 시저가별로 좋지 않습니다. ID를 매개 변수로 가지지 않아서 전자 메일을 가지고 있으므로 해당 전자 메일에 해당하는 ID를 가져 와서 변수에 저장해야합니다. 프로 시저, 그런 다음 어떻게 그 변수가되도록 out 매개 변수를 지정합니까? –

+0

'some_table에서 out_parameter에 ID를 선택하십시오. 여기서 email = email_parameter'와 같이'WHERE' 조건을 추가하기 만하면됩니다. PHP에서 호출하고 OUT 매개 변수 값을 저장하는 방법에 대해 - 저는 인터넷에 많은 예제가 있다는 것을 확신합니다. 나는 PHP에 대해 전혀 모른다는 이유로 거기에서 도울 수 없다. 질문에 대한 대답이 SQL과 관련이 있습니다. – Rahul

+0

아니요, 아니요, 프로 시저 코드 내부에 의미가 없습니다. ID를 변수에 할당해야합니다. 왜냐하면 insert 문에서 한 번 사용하고 반환해야하기 때문에 @ id = SELECT id FROM users WHERE email = IN_EMAIL'처럼 보일 것입니다. 프로 시저 내에서 변수를 정의하는 구문. 그렇다면 변수를 반환하기 위해 SELECT @id INTO ret_ID와 같은 것을 사용해야합니다. –