2016-07-19 2 views
1

이전에는 트랜잭션을 사용 해본 적이 없지만 데이터베이스에 내 HTML 양식을 통해 데이터를 올릴 때 문제가 발생하면 롤백이 필요합니다.MySQL 트랜잭션 - 시작 문제

소리가 굉장하지만, MySQL 쿼리에서 그 장소와 사용법을 완전히 이해하는 데 어려움을 겪고 있습니다.

$sql = "BEGIN 

     /* Insert the user to the WordPress Database */ 
     INSERT INTO wp_users (user_login, user_pass, user_email) 
     VALUES ('John', 'Doe', '[email protected]'); 

     /* Insert the user into our Custom Database */ 
     INSERT INTO users (ID, name) 
     VALUES (LAST_INSERT_ID(), 'John') 

     COMMIT"; 

나는 코드의 일부는 쉽게 읽을 수 편집 한, 나는 암호가 안전하지 예를 들어 알고 있지만, 내가 뭔가 잘못 &가 트랜잭션에 대한 기능을 COMMIT BEGIN을하고 있는가?

또한 LAST_INSERT_ID() 함수를 최대한 활용할 수 있도록 트랜잭션을 사용하려고합니다. 그러면 두 데이터베이스간에 사용자가 동일한 ID를 공유하므로 다양한 웹 사이트 응용 프로그램의 이유로 고유 한 데이터를 쉽게 호출 할 수 있습니다.

온라인에서 몇 가지 사실을 발견했지만 쉽게 이해할 수있는 예제는 없습니다. 정확히 내가 뭘 잘못하고 있니? 내 구현이 끔찍한가요, 아니면 방금 누락 되었습니까? LAST_INSERT_ID()가 그렇게 작동합니까?

제공 할 수있는 모든 도움에 감사드립니다. 고맙습니다.

+0

1) MySQLi가 DB에 연결할 가능성은? 2) 어떤 오류 메시지가 나타 납니까? – BeetleJuice

+0

http://stackoverflow.com/questions/9974325/mysql-transaction-within-a-stored-procedure- 롤백의 좋은 사용법을 보여줍니다. – RamRaider

+0

예, MySQLi를 사용하고 있습니다. 단 하나의 테이블에 삽입하지만, 트랜잭션을 구현할 때 실패합니다. 감사합니다 RamRider - 고맙습니다. 나는 적절한 장소에서 명령어를 얻었습니까? –

답변

0

PHP에서 트랜잭션을 처리하는 데 PDO를 사용할 수 있습니다. 참조 번호 here

마지막으로 삽입 한 행 ID입니다. 당신이 Mysqli을 사용하고 있기 때문에 here

+0

이미 MySQLi를 사용하고 있습니다. 시스템의 나머지 부분이 MySQLi를 기반으로하므로 실제로 변경하지는 않습니다. Last_Inserted_Row() 링크를 가져 주셔서 감사합니다. 그게 내가 찾은 것보다 더 도움이된다. –

0

을 참조하고 쿼리를 아래의 코드와 같이 같은 것을 할 수 성공할 때 쿼리의 일부가 실패한 경우 롤백 또는 커밋 할 :

를 (또한 나는이 부분은 가정 잘못 "사용자 삽입 (ID, 이름) VALUES (LAST_INSERT_ID(), '존')"당신은 아마 당신은 또한 절차 적 스타일 (mysqli_query, mysqli_insert_id 등을 사용할 수 있습니다

//just a temporary variable to store eventual error 
$query_ok=true; 

//start transaction here 
$mysqli->begin_transaction(MYSQLI_TRANS_START_READ_WRITE); 

$mysqli->query("INSERT INTO wp_users (user_login, user_pass, user_email) 
     VALUES ('John', 'Doe', '[email protected]');") ? null : $query_ok=false; 

$mysqli->query("UPDATE users SET name ='John' WHERE ID=".$mysqli->insert_id) ? null : $query_ok=false; 

//if $query_ok is still set to true then we commit changes to database otherwise we do rollback 
$query_ok ? $mysqli->commit() : $mysqli->rollback(); 

"UPDATE")를 사용하여 원하는)