質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

Q&A

1回答

2820閲覧

FuelPHP DBトランザクションが効かない

earnest_gay

総合スコア615

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

0グッド

0クリップ

投稿2018/04/07 18:17

DBのデータ型はInnoDBなのですが、トランザクションがきかないようです。
fuelphpなのですが使い方が間違っているのでしょうか?

php

1public function up() 2{ 3 try 4 { 5 DB::start_transaction(); 6 DBUtil::create_table('users_details', array( 7 'id' => array('type' => 'int', 'constraint' => 11, 'auto_increment' => true, 'unsigned' => true, 'comment' => 'ユーザーID'), 8 'user_id' => array('type' => 'int', 'constraint' => 11, 'default' => 0, 'comment' => 'ユーザーID'), 9 'company_id' => array('type' => 'int', 'constraint' => 11, 'default' => 0, 'comment' => '企業ID'), 10 'has_profile_picture' => array('type' => 'enum', 'constraint' => '"0","1"', 'default' => '0', 'comment' => 'プロフィール画像の有無'), 11 'first_name' => array('type' => 'varchar', 'constraint' => 25, 'comment' => '名前'), 12 'first_name_kana' => array('type' => 'varchar', 'constraint' => 25, 'comment' => '名前(カナ)'), 13 'last_name' => array('type' => 'varchar', 'constraint' => 25, 'comment' => '苗字'), 14 'last_name_kana' => array('type' => 'varchar', 'constraint' => 25, 'comment' => '苗字(カナ)'), 15 'nickname' => array('type' => 'varchar', 'constraint' => 25, 'comment' => 'ニックネーム'), 16 ), array('id')); 17 DBUtil::create_index('users_details', 'user_id'); 18 DBUtil::create_table('users_security_history', array( 19 'id' => array('type' => 'int', 'constraint' => 11, 'auto_increment' => true, 'unsigned' => true, 'comment' => 'ユーザーID'), 20 'user_id' => array('type' => 'int', 'constraint' => 11, 'default' => 0, 'comment' => 'ユーザーID'), 21 'change_type' => array('type' => 'enum', 'constraint' => '"1","2"', 'default' => '', 'comment' => '変更種別 1:パスワード/2:メールアドレス'), 22 'old_value' => array('type' => 'varchar', 'constraint' => 255, 'comment' => '変更前の値'), 23 'new_value' => array('type' => 'varchar', 'constraint' => 255, 'comment' => '変更後の値'), 24 ), array('id')); 25 DBUtil::create_index('users_security_history', 'user_id'); 26 DB::commit_transaction(); 27 } 28 catch (\Exception $e) 29 { 30 DB::rollback_transaction(); 31 throw $e; 32 } 33}

下記は必ずエラーになります。
'change_type' => array('type' => 'enum', 'constraint' => '"1","2"', 'default' => ''

こちら取り得る値が1,2ですがデフォルト値として''は受け付けないので

Syntax error or access violation: 1067 Invalid default value for 'change_type' with query: "CREATE TABLE IF NOT EXISTS `users_security_history`

というエラーができます。
users_security_historyテーブルは生成されていないのに、users_detailsテーブルは生成されるのはおかしいのでトランザクションを使ってみましたが、同じようにusers_detailsが生成されています。

こちらどうしたら良いか教えていただけないでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

こちらをどうぞ

暗黙的なコミットを発生させるステートメント

mysql データベース内のテーブルを暗黙的に使用または変更するステートメント。CREATE USER、DROP USER、GRANT、RENAME USER、REVOKE、SET PASSWORD。

「暗黙的なコミット」という意味が受け取りにくい訳ですが、明示的なコミットは効きませんよって話です。
トランザクションは無視して、コミットしちゃいますからね、ってことです。

投稿2018/04/07 18:24

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問