2012-02-09 26 views
6

Tôi cần id của đối tượng được chèn lần cuối. Tôi sử dụng báo cáo chuẩn bị để tránh tiêm sql. Nhưng tôi không chắc chắn làm thế nào để có được id.Truy cập id của đối tượng được chèn sau câu lệnh đã chuẩn bị trong PHP bằng MYSQLi

$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();    

Kết quả là 0 luôn mặc dù có một mục trong cơ sở dữ liệu

Giải pháp Yếu tố đã được đưa vào cơ sở dữ liệu. Vấn đề là khi tôi đã tạo ra id bảng không phải là một số nguyên nó là một varchar đại diện cho một id nhân viên. Để khắc phục điều này, tôi đã thêm id nhân viên làm cột bổ sung trong bảng và sử dụng khóa chính id mặc định int auto_increment và nó đã hoạt động.

Trả lời

3

Hãy thử thay đổi $result = $stmt->get_result(); để $result = $stmt->insert_id;

get_result() được nhiều hơn cho SELECT truy vấn, chứ không phải là INSERT s.

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

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

+0

Tôi thực sự tìm thấy chức năng đó và cố gắng sử dụng nó tuy nhiên, nó không ngừng trả về 0. – user1165788

+1

Sanity check - sao nó thực sự chắc chắn chèn một hàng? I E. nó đã làm 'INSERT' hay' IGNORE'? – Joe

+0

Tôi đã tìm ra. Nó đã được đưa vào bảng, nhưng sau đó tôi nhận ra id khóa chính của tôi là một mã nhân viên mà tôi đã thiết lập để nó không trả về giá trị của khóa chính. Tôi chỉ cần đặt mã nhân viên làm cột bổ sung trong cơ sở dữ liệu và sử dụng id tăng tự động mặc định làm khóa chính và nó hoạt động. – user1165788

Các vấn đề liên quan