1

私はこれについていくつかの質問と回答を見てきましたが、私の問題に非常に似ているものはないので、今私は尋ねています。

これが状況です

users、、、というテーブルがありrolesますuser_role

テーブルusers

フィールドuser_id、、username_password

:役割

フィールドrole_idrole_name

テーブル:user_role

フィールドuser_idrole_id

user_role.user_id外部キーuser.user_id

user_role.role_id外部キーrole.role_id

私の問題は、ユーザーを作成するときに、その役割をデフォルト値または<select>要素で選択した選択値に設定したいということです。

私は次のようないくつかのことを試しました:

INSERT INTO users as t1 (t1.username, t1.password, t2.role)
JOIN user_role as t2 ON t1.user_id = t2.user_id
VALUES (:username, :password, :role)

私はそれを非常に間違っていますか?

以下の回答のために編集してください

私はまだ何かが間違っていると思います、それは私に空白の画面を与えます

$this->db->beginTransaction();
$string = "INSERT INTO users (username, password)
VALUES (:user,:pass,:first,:middle,:last,:course)";
$sth = $this->db->prepare($string);
$sth->execute(array(
':user'=> $data['user'],
':pass'=> $data['pass']
));

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

$this->db->commit();
4

1 に答える 1

0

PHPとPDOを使用しているように見えるので、この簡略化されたコードが挿入を処理します。

$pdo->beginTransaction();
$stmt = $conn->prepare('INSERT INTO users (username, password) VALUES (?, ?)');
$stmt->execute(array($username, $password));

$stmt = $conn->prepare('INSERT INTO user_roles (user_id, role_id) VALUES (' . $pdo->lastInsertId() . ', ?)');
$stmt->execute(array($role));
$pdo->commit();

テーブルにユーザーを挿入するとusers、によって返される値は$pdo->lastInsertId()、テーブルidに挿入されたばかりの値usersです。

lastInsertId()の詳細をご覧ください。

これらの2つの挿入ステートメントをトランザクションに入れれば、準備は完了です。

于 2012-07-29T07:51:03.597 に答える