2011-11-23 49 views
6

Tôi biết có rất nhiều chủ đề có cùng tiêu đề. Nhưng chủ yếu là truy vấn được đưa vào sai địa điểm. Nhưng tôi nghĩ tôi đã đặt nó đúng. Vì vậy, vấn đề là, tôi vẫn nhận được 0 ngay cả khi dữ liệu được chèn vào trong db. Có ai biết câu trả lời mà tôi có thể sai không?mysql_insert_id() trả về 0

đây là mã của tôi:

mysql_query('SET NAMES utf8'); 
    $this->arr_kolommen = $arr_kolommen; 
    $this->arr_waardes = $arr_waardes; 
    $this->tabel = $tabel; 
    $aantal = count($this->arr_kolommen); 
    //$sql="INSERT INTO `tbl_photo_lijst_zoekcriteria` (`PLZ_FOTO` , `PLZ_ZOEKCRITERIA`,`PLZ_CATEGORIE`)VALUES ('$foto', '$zoekje','$afdeling');"; 
    $insert = "INSERT INTO ".$this->tabel." "; 
    $kolommen = "("; 
    $waardes = " VALUES("; 
    for($i=0;$i<$aantal;$i++) 
    { 
     $kolommen .=$this->arr_kolommen[$i].","; 
     $waardes .="'".$this->arr_waardes[$i]."',"; 
    } 
    $kolommen = substr($kolommen,0,-1).")"; 
    $waardes = substr($waardes,0,-1).")"; 
    $insert .=$kolommen.$waardes; 
    $result = mysql_query($insert,$this->db) or die ($this->sendErrorToMail(str_replace(" ","",str_replace("\r\n","\n",$insert))."\n\n".str_replace(" ","",str_replace("\r\n","\n",mysql_error())))); 
    $waarde = mysql_insert_id(); 

Thanks a lot trước, bởi vì tôi đã phá vỡ đầu tôi cho cái này cho hầu hết đã là cả ngày. (Và có lẽ đó là một cái gì đó nhỏ và ngu ngốc)

+3

xin vui lòng hiển thị các chương trình bảng. Bạn có trường bảng tăng tự động không? –

+0

Bạn đang sử dụng số nhận dạng liên kết cụ thể trong truy vấn của mình ($ this-> db), nhưng không sử dụng cho insert_id. Điều đó có thể khiến nó nhìn vào một kết nối hoàn toàn khác. "Nếu định danh liên kết không được chỉ định, liên kết cuối cùng được mở bởi mysql_connect() được giả định." – PtPazuzu

+0

@ Topener: Có, tôi có trường bảng tăng tự động.\t ID \t Int (11) \t Nee \t Geen \t AUTO_INCREMENT @PtPazuzu và cách tôi có thể giải quyết vấn đề? (Cảm ơn cả hai bạn đã trả lời – user750079

Trả lời

12

Theo nhuận manual mysql_insert_id:

ID được tạo ra cho một cột AUTO_INCREMENT bởi các truy vấn trước đó trên thành công, 0 nếu truy vấn trước đó không tạo ra một AUTO_INCREMENT giá trị hoặc FALSE nếu không có kết nối MySQL nào được thiết lập.

Vì nó không cung cấp cho bạn false và không đúng số, nó chỉ ra rằng bảng được truy vấn không tạo ra giá trị tăng tự động.

Có hai khả năng tôi có thể nghĩ:

  1. bảng của bạn không có một trường auto_increment
  2. Vì bạn không cung cấp liên kết đến mysql_insert_id() nhưng sử dụng một liên kết với mysql_query() nó có thể không phải là bảng chính xác được truy vấn khi truy xuất id được chèn cuối cùng.

Giải pháp:

  1. Hãy chắc chắn rằng nó có một trường auto_increment
  2. Cung cấp các liên kết là tốt: $waarde = mysql_insert_id($this->db);
+0

ID là trường auto_increment .Tôi làm cách nào để giải quyết nó, nếu đó là vấn đề thứ 2? – user750079

+0

@ user750079 thử gọi 'mysql_insert_id' với' $ this-> db' như tôi đã đề cập trong Trả lời – Marcus

+0

@ Marcus Xin lỗi tôi đã đọc nó, nhưng nó hoạt động Cảm ơn bạn rất nhiều Tôi đã quá ngu ngốc để viết thay vì $ this-> db; $ insert, $ result (với các từ khác, tất cả các vars khác, nhưng quên $ . này) Thank you very much – user750079

0

Có thể là truy vấn INSERT của bạn đã không thành công - ví dụ, có thể bạn đang cố gắng chèn dữ liệu trùng lặp vào một cột có dữ liệu phải là duy nhất?

0

Nếu id thực sự được đặt thành tăng tự động và vẫn nhận được '0' khi phản hồi của bạn thực hiện việc đếm cột và giá trị chỉ sau này, tôi nhận thấy số lượng cột của tôi không khớp với số lượng giá trị.

0

Trình viết mã có một hành vi lạ khi gọi mysql_insert_id(). Hàm trả về 0 sau lần gọi đầu tiên. Vì vậy, gọi đó là hai lần sẽ trở lại 0.

Sử dụng một biến thay vì gọi chức năng nhiều lần:

$id = mysql_insert_id();