2012-02-09 20 views
6

最後に挿入されたオブジェクトのIDが必要です。私は準備された文を使用してSQLインジェクションを回避します。 しかし、私はIDを取得する方法がわかりません。MYSQLiを使用してPHPでプリペアドステートメントの後に挿入されたオブジェクトのIDにアクセスします。

$sql = "INSERT IGNORE INTO faculty (id, term, role, prefix, first_name, 
       middle_name, last_name, suffix) VALUES (?,?,?,?,?,?,?,?)"; 

     if (!($stmt = $mysqli->prepare($sql))) 
      echo "Faculty Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error; 

     $stmt->bind_param('sissssss', 
       $faculty['id'], 
       $faculty['term'], 
       $faculty['role'], 
       $faculty->name->prefix, 
       $faculty->name->first, 
       $faculty->name->middle, 
       $faculty->name->last, 
       $faculty->name->suffix 
     ); 

     if (!$stmt->execute()) 
      echo "Faculty Execute failed: (" . $mysqli->errno . ") " . $mysqli->error; 

     $result = $stmt->insert_id; 
     echo "\n Result:" . $result;  
     $stmt->close();    

結果が要素がデータベースに挿入されたデータベース

ソリューション のエントリであるにも関わらず、常に0です。問題は、私がテーブルidを作成したときに整数ではなく、従業員IDを表すvarcharであるということでした。これを修正するために、従業員IDを表の追加列として追加し、デフォルトのID int auto_increment主キーを使用しました。

答えて

3

$result = $stmt->get_result();get_result()

$result = $stmt->insert_id;にを変更してみてくださいは SELECTクエリではなく、 INSERTのためのより多くのです。

http://php.net/manual/en/mysqli-stmt.get-result.php

http://php.net/manual/en/mysqli-stmt.insert-id.php

+0

私は実際にその機能を発見し、しかし、それを使用してみました、それは常に0 – user1165788

+1

健全性チェックを返す - それは実際には間違いなく、行を挿入したのですか?つまりそれは 'INSERT'か' IGNORE'ですか? – Joe

+0

私はそれを理解しました。それはテーブルに挿入されていましたが、プライマリキーのIDがプライマリキーの値を返さないように設定していた従業員コードであることが分かりました。私はちょうどデータベース内の追加の列として従業員コードを設定し、プライマリキーとしてデフォルトの自動インクリメントIDを使用し、それは働いた。 – user1165788

関連する問題