2010-08-06 51 views
7

Khi tôi thực hiện như sau trong MySQL console, nó hoạt động tốt:Sử dụng LAST_INSERT_ID() qua PHP?

INSERT INTO videos (embed_code) VALUES ('test code here'); 
SELECT LAST_INSERT_ID(); 

Tuy nhiên, khi tôi thực hiện các truy vấn trên qua PHP, kết quả là rỗng.

Theo trừu tượng dữ liệu, tôi đang sử dụng lớp truy cập cơ sở dữ liệu có tên DB. Đây là cách tôi đã thử các truy vấn trên thông qua PHP:

$embedCode = htmlentities($_POST['embed_code']); 

//Insert video in database **WORKS** 
DB::query("INSERT INTO videos (embed_code) VALUES ('$embedCode');"); 

//Retrieve id **DOES NOT WORK** 
$row = DB::getSingleRow("SELECT LAST_INSERT_ID();"); 
$videoId = $row[0]; 

Không đáng tin cậy để tôi chọn id mới bằng mã embed_code vì mã nhúng có thể được lặp lại.

Cảm ơn!

Trả lời

4

Lớp cơ sở dữ liệu của bạn có chứa hàm để lấy ID chèn cuối cùng không? Hãy thử mysql_insert_id() thay vào đó.

http://nl.php.net/mysql_insert_id

+0

Đúng, bạn đã đúng. Tôi đang sử dụng PDO và nó có một phương thức 'lastInsertId()'! Tôi không nghĩ về điều đó. Cảm ơn! –

1

PHP có chức năng gọi là mysql_insert_id sẽ cung cấp cho bạn kết quả tương tự như truy vấn SELECT LAST_INSERT_ID();.

0

Có chức năng dành riêng cho điều này - bạn không nên sử dụng phiên bản SQL như nó không hoạt động.

Trong thư viện MySQL, bạn nên sử dụng hàm mysql_insert_id, trong khi đối tượng mysqli có thuộc tính insert-id. Điều này tất nhiên có thể đã được tiếp xúc trong bất cứ lớp DB bạn đang sử dụng.

+0

Tại sao nó không hoạt động? – iX3

0

Bạn có thể thử với chức năng mysql_insert_id của PHP.

Tôi nghĩ rằng những gì đang xảy ra là mỗi cuộc gọi DB::query là trong một giao dịch khác, do đó, $row đang trống. Có thể bạn có thể đọc tài liệu DB:query để thử chạy cả hai cuộc gọi trong cùng một giao dịch.

0

mysql_insert_id không còn được dùng nữa. Vì vậy, tôi nghĩ rằng chủ đề này cần phải được cập nhật.

0

mysql_insert_id được đánh dấu là không dùng nữa kể từ PHP 5.5.0.

Trong ví dụ này uid là khóa chính của video bảng.

$row = DB::getMultipleRows("SELECT uid FROM videos WHERE uid=LAST_INSERT_ID();"); 
if (
    isset($row) && 
    is_array($row) && 
    isset($row['0']) && 
    is_array($row['0']) && 
    isset($row['0']['uid']) 
) { 
    $videoId = $row['0']['uid']; 
} 
0

bạn nên trả lại lastInsertId của PDO ra bên ngoài lớp học của bạn. ví dụ:

class DB 
{ 
    public $last_insert_id; 
    function x() 
    { 
     $stmt = $db->prepare($Query); 
     $stmt->execute(); 
     $this->last_insert_id = $db->lastInsertId(); 
    }  
} 
Các vấn đề liên quan