2016-04-30 12 views
0

私はユーザログインと電子メールによる登録でWebサイトを設計しています。ユーザがアカウントを登録すると、そのユーザレコードがデータベースに正しく挿入されます"users"テーブル。PHP MySQLiがテーブルにデータを挿入しない準備済みの文

しかし、サイトのすべてのメンバーの名簿の2番目のテーブルに挿入するときに作成されたユーザーIDをプルしようとすると(これはゲーム用のものです)、ユーザーIDを0として挿入します自分のIDがそのユーザーの「ユーザー」表にあるかどうかにかかわらず、ロスタ表に表示されます。

HERESに私のコード:私は私に頭痛を引き起こし、このセクション上の任意のベアリングを持っていないコードは省略の特定の変数やセクションを残しているセキュリティ上の理由から

if($insert_stmt = $db->prepare("INSERT INTO users (username, password, email, date, actcode) VALUES (?, ?, ?, ?, ?)")) 
    { 
     $insert_stmt->bind_param('sssss', $username, $password, $email, $date, $actcode); 

     $stmt = $db->prepare("SELECT id FROM users WHERE email = ?"); 
     if($stmt) 
     { 
      $stmt->bind_param('s', $email); 
      $stmt->execute(); 
      $stmt->fetch(); 
      $stmt->store_result(); 
      $stmt->bind_result($ui); 
     } 

     $stmt = $db->prepare("INSERT INTO roster (userid, joindate) VALUES (?, ?)"); 
     if($stmt) 
     { 
      $stmt->bind_param('ss', $ui, $date); 
      $stmt->execute(); 
     } 

     if(!$insert_stmt->execute()) { 
      header('Location: error.php?err=Registration failure: INSERT'); 
     } 
    } 

"userid"カラムの下の "roster"テーブルに、そのユーザアカウントの "users"から新たに作成された "id"を挿入しない理由を理解できません。

はまた、単に何かをテストするために、私も行って、セッション変数

ライン

$stmt->store_result($ui); 

後に直接

$_SESSION['uid'] = $ui;

を設定して、私のindex.phpファイルでそれをエコーし​​、セッション変数も0として表示されます。

+0

コードブロックが実行されていますか? mysqli_error()を追加して、何かが失敗しているかどうかを確認する必要があります。静かにすべてが失敗するように見える。 – Mike

+0

コードにデバッグ文を追加できますか? print_r($ stmt)の出力は何ですか? – Edward

答えて

1

2番目のクエリを書き込む代わりに、mysqli::$insert_idという関数を使用すると簡単です。

は、この行を置き換えますと

$stmt = $db->prepare("SELECT id FROM users WHERE email = ?"); 

$userid = $db->insert_id; 

が、この作品なら、私に教えてください。

+0

これは、\ 'id \'列がAUTO_INCREMENTであり、列の値がBEFORE INSERTトリガーによって設定されていないことを前提としています。 – spencer7593

+0

ユーザー登録テーブルには、ほぼ確実にAUTO_INCREMENTというID列があります。 – Edward

+0

うん、idカラムが自動インクリメントであることはかなり明白です。この場合、私が疑うエンタープライズウェブアプリケーションのように、数字の代わりに長い文字を挿入しない限り。 –

0

解決策はまだ提供されていませんでしたが、問題を修正したすべてのものをusersテーブルにマージすることに決めました。それが実行されているかどうかを調べる限り、私はそれが通過することを確認するためにいくつかの小切手を入れています。助けて助けてくれてありがとう。

関連する問題