3
$this->db->beginTransaction();
$this->db->query ('LOCK TABLES users WRITE');
$sql = 'INSERT INTO users (uname) VALUES (:uname)';
$sth = $this->db->prepare ($sql);
$sth->bindParam (':uname', $uname);
$sth->execute ();
if ($sth->rowCount()==0) {
  $this->db->rollBack();
  $this->db->query ('UNLOCK TABLES');
  throw new Exception('<strong>Oh snap!</strong> User name is taken! Try again.');
}

データベースに「テスト」と呼ばれるユーザーを手動で設定しました。そして、「test2」というユーザーを作成したとき、それは機能しました。しかし、3番目のユーザーを作成しようとすると、次のようになりますrowCount = 0

unamedb内のはですvarchar(15)

if(isset($_POST['regUser']) && isset($_POST['regPwd']) && isset($_POST['regConfirmPwd'])) {  
    if($_POST['regPwd'] == $_POST['regConfirmPwd'] ) {  
        $user->newUser($_POST['regUser'], $_POST['regPwd']);

} else {  
    $user->error = "<strong>Oh snap!</strong> The passwords don't match!";
  }  
}  

投稿情報を私のnewuser関数に送信すると、コードの最初のビットで停止します。何か案は?

4

1 に答える 1

1

ユーザーを挿入してからロールバックするのではなく、(テーブルをロックした後)そのユーザーが使用可能かどうかをテストしてから、自信を持って挿入を行う方がよい場合があります。

于 2013-02-27T13:36:09.297 に答える