2

私はこの登録関連のものを持っています。ユーザーが[ユーザーの追加]をクリックするとすぐに3つのテーブルにデータを入力したいと思います。

テーブルは次のとおりです。

users
roles
status
user_role
user_status

システムは、次のユーザーテーブルのようにデータを挿入する必要があり ます。

 username
 password

user_roles

user_id
default value

ユーザーステータス

user_id
default value

私はこれを機能させるためにpdobegintransactionとcommitを使用しました...これは2つのテーブルで使用した場合はうまく機能しましたが、別のテーブルを使用して同じコードパターンを実行すると、まったく機能しませんでした。

コードは次のとおりです。

$this->db->beginTransaction();
        $sth = $this->db->prepare("INSERT INTO users (username, password)
        VALUES (:user,:pass)");
        $sth->execute(array(
            ':user'=> $data['user'],
            ':pass'=> Hash::create('sha256', $data['pass'], HASH)
        ));

        $sth = $this->db->prepare("INSERT INTO user_role (user_id, role_id) VALUES (:user, :role)");
        $sth->execute(array(
            ':user' => $this->db->lastInsertId(),
            ':role' => 3
        ));

        $sth = $this->db->prepare("INSERT INTO user_status (user_id, status_id) VALUES (:user, :status)");
        $sth->execute(array(
            ':user' => $this->db->lastInsertId(),
            ':status' => 1
        ));

        $this->db->commit();

問題は何だと思いますか。これもある種の構文エラーではないかと思いますが、見つかりませんでした。最後の手段は、これが3つのテーブルで機能するかどうかもわからないためです。ありがとうございました!

4

1 に答える 1

0

最初の挿入後:

$insertID = $this->db->lastInsertId();

その後、次のようにINSERTS

':user' => $insertID,
于 2012-07-31T17:10:42.960 に答える