Ich habe eine Einfügeabfrage (aktiver Datensatzstil), mit der die Formularfelder in eine MySQL-Tabelle eingefügt werden. Ich möchte die letzte automatisch inkrementierte ID für die Einfügeoperation als Rückgabewert meiner Abfrage erhalten, habe jedoch einige Probleme damit.
Im Controller:
function add_post(){
$post_data = array(
'id' => '',
'user_id' => '11330',
'content' => $this->input->post('poster_textarea'),
'date_time' => date("Y-m-d H:i:s"),
'status' => '1'
);
return $this->blog_model->add_post($post_data);
}
Und Innenmodell:
function add_post($post_data){
$this->db->trans_start();
$this->db->insert('posts',$post_data);
$this->db->trans_complete();
return $this->db->insert_id();
}
Ich bekomme nichts als die Rückgabe des add_post im Modell
mysql
codeigniter
Afghan Dev
quelle
quelle
db->insert_id()
kehrtfalse
nach adb->trans_complete()
. Stellen Sie sicher, dass Sie Ihre erhalteninsert_id()
, bevor Sie die Transaktion abschließen.Antworten:
Versuche dies
Bei mehreren Einsätzen können Sie verwenden
quelle
Eine Transaktion wird hier nicht benötigt, dies sollte ausreichen:
quelle
quelle
Aus der Dokumentation :
Daher könnten Sie so etwas verwenden:
quelle
Da Sie die Transaktion über die Dateneinfügung so initiiert haben, überprüfen Sie zunächst, ob die Transaktion abgeschlossen ist oder nicht. Sobald Sie die Transaktion gestartet haben, sollte sie je nach Status der Transaktion festgeschrieben oder zurückgesetzt werden.
Oben haben wir die Daten für die erfolgreiche Transaktion festgeschrieben, auch wenn Sie den Zeitstempel erhalten
quelle
Nur um dieses Thema zu vervollständigen: Wenn Sie Ihre Tabelle mit Primärschlüssel und automatischer Inkrementierung einrichten, können Sie den Vorgang des manuellen Inkrementierens der ID weglassen.
Schauen Sie sich dieses Beispiel an
Jetzt können Sie Zeilen einfügen
quelle
quelle
Mit dem mysqli PHP-Treiber können Sie die insert_id nach dem Festschreiben nicht mehr abrufen.
Die wirkliche Lösung ist folgende:
Quelle für die Codestruktur: https://codeigniter.com/user_guide/database/transactions.html#running-transactions-manually
quelle
Sie müssen verwenden
$lastId = $this->db->insert_id();
quelle