2013-03-11 34 views
8

Mam następujący kod. Mysqli_insert_id() (w tym przypadku "$ last_row"), który ma zwrócić ostatni wiersz tabeli, zawsze zwraca 0. Dlaczego tak jest?Dlaczego funkcja mysqli_insert_id() zawsze zwraca 0?

<?php 
include('connect-db.php'); 
$submit_date = date("Ymd"); 
$content = mysqli_real_escape_string($connection, htmlspecialchars($_POST['editor'])); 
$ip_address = $_SERVER['REMOTE_ADDR']; 
$last_row = mysqli_insert_id($connection); 

if ($content != '') { 

$sql = "INSERT INTO source (track_id, submit_date, ip, content) VALUES ('$last_row', '$submit_date','$ip_address','$content')"; 

if (!mysqli_query($connection,$sql)) 
    { 
    die('Error: ' . mysqli_error($connection)); 
    } 

echo $last_row; 
mysqli_close($connection); 
} 

?> 
+1

„* Zwracane wartości: wartość pola AUTO_INCREMENT który został zaktualizowany przez poprzednie zapytanie. ** Zwraca zero, jeśli nie było wcześniejszego zapytania w połączeniu lub jeśli zapytanie nie zaktualizowało wartości AUTO_INCREMENT **. * " – DCoder

+0

Spójrz: http://php.net/manual/en /mysqli.insert-id.php –

Odpowiedz

16

mysqli_insert_id nie nie zwrócić identyfikator ostatnim wierszu tabeli. Od the docs, to:

... zwraca identyfikator wygenerowany przez zapytanie w tabeli z kolumną mającą atrybut AUTO_INCREMENT. Jeśli ostatnie zapytanie nie było instrukcją INSERT lub UPDATE lub jeśli zmodyfikowana tabela nie ma kolumny z atrybutem AUTO_INCREMENT, funkcja zwróci zero.

(Moje podkreślenie)

Oznacza to, że jeśli było go uruchomić natychmiast po wkładkę, która automatycznie wygenerowany identyfikator, na tym samym połączeniu zrobiłeś wkładkę z, że będzie zwróć identyfikator wygenerowany dla tej wstawki.

ten ilustruje przykład w docs połączonych powyżej:

$query = "INSERT INTO myCity VALUES (NULL, 'Stuttgart', 'DEU', 'Stuttgart', 617000)"; 
$mysqli->query($query); 

printf ("New Record has id %d.\n", $mysqli->insert_id); 
11

Aby uzyskać wynik, należy umieścić

$last_row = mysqli_insert_id($connection); 

po zapytaniu INSERT

+1

Określanie połączenia $ w mysqli_insert_id() jest ważne. Albo nie można odzyskać identyfikatora. – Devner

0

dla innych ludzi przychodząc tutaj, może wypróbowałeś INSERT IGNORE INTO i masz wartość UNIQUE, która została już wstawiona. W takim przypadku ten identyfikator wynosi zero.

Dostaniesz też "zero", jeśli MySQL skończy się połączenie. Nie jestem ekspertem od trwałych połączeń, ale to może pomóc komuś?

Jak zapewne wiecie php „mysql” rozszerzenie obsługiwane uporczywe połączeń, ale były one wyłączone w nowym „mysqli” rozszerzenie --Peter Zajcew

Powiązane problemy