2016-07-19 12 views
1

以前はトランザクションを使用したことはありませんが、私は自分のHTMLフォームを介してデータベースにデータを書き込むときに問題が発生した場合にロールバックが行われるようにしたいと考えています。MySQLトランザクション - BEGIN問題

素晴らしいですが、私は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"; 

私は読みやすいようにコードの一部を編集した、と私は知っている、たとえばパスワードは安全ではありませんが、私はBEGIN &で何か間違ったことをやっているが、トランザクションのための機能をCOMMIT?

私はLAST_INSERT_ID()関数を最大限に活用できるようにトランザクションも使用しようとしています。これにより、両方のデータベース間で確実に同一のIDを共有できるようになり、さまざまなWebアプリケーションの理由で固有のデータを簡単に呼び出すことができます。

私はいくつかのものをオンラインで見つけましたが、実際には簡単に理解できる例はありません。私は間違って何をしているのですか?私の実装はひどいのですか?何か不足していますか? LAST_INSERT_ID()はそのように動作しますか?

ご提供いただけるお役に立てれば幸いです。ありがとうございました。

+0

1) MySQLiは万が一DBに接続するのですか? 2)どのようなエラーメッセージが表示されますか? – BeetleJuice

+0

は、http://stackoverflow.com/questions/9974325/mysql-transaction-within-a-stored-procedureを見てください - これはロールバックの良い使い方を示しています – RamRaider

+0

はい、私はMySQLiを使用しています - システムは正常に動作します1つだけを1つのテーブルに挿入しますが、トランザクションの実装時には失敗します。 ありがとうRamRaider - 私は見てみましょう。私は、私が単に適切な場所などでコマンドを取得したかどうかについてほとんど心配しています。 –

答えて

0

PHPでトランザクションを処理するためにPDOを使用することがあります。参照先here

最後に挿入された行ID。 here

+0

既にMySQLiを使用しています。残りのシステムがMySQLi上に構築されているので、あまり変更したくありません。 Last_Inserted_Row()リンクをありがとう。それは私が見つけたものよりも助けになります。 –

0

を参照してくださいあなたはのMysqliを使用していて、クエリは以下のコードに示すように、あなたが何かを行うことができます成功したときに、クエリのいずれかの部分が失敗した場合はロールバックまたはコミットしたいので:

(また、私はこの部分があると仮定あなたはまた、手続き型(mysqli_query、mysqli_insert_idなどを使用することができ、間違った "ユーザー(ID、名前) VALUES(LAST_INSERT_ID()、 'ジョン・')INTO INSERT" あなたはおそらく "UPDATE" を使用したいと)

//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(); 

関連する問題