2017-02-22 21 views
0

mein Problem ist so komisch. Ich versuche, eine Zeile in Mysql-Tabelle (mit InnoDB) einzufügen. Es gibt keine Fehler. alles sieht gut aus. aber die Zeile wird nicht in die Tabelle eingefügt.Codeigniter 3 Abfrage einfügen fehlgeschlagen

UPDATE:

Wickeltisch Motor aus InnoDB zu MyISAM wird das Problem beheben, aber warum wird InnoDB nicht?

hier ist mein Code und es gibt immer true:

$this->db->trans_start(); 
    $this->db->set('userId', '27193'); 
    $this->db->set('listId', '14'); 
    $this->db->set('createDate', '2017-02-23'); 
    $this->db->set('alertReq', '1'); 
    $this->db->insert('parking'); 
    if ($this->db->affected_rows() == '1') { 
    $this->db->trans_complete(); 
    return true; 

    } else { 
    $this->db->trans_complete(); 
    return false; 
    } 

Ich habe auch versucht, den Einsatz Abfrage auf unterschiedliche Weise:

$parkings = array (
    'userId' => '27193', 
    'listId' => '14', 
    'createDate' => '2017-02-23', 
    'alertReq' => '1' 
); 
    $this->db->trans_start(); 
    $this->db->insert('parking', $parkings); 
    if ($this->db->affected_rows() == '1') { 
    $this->db->trans_complete(); 
    return true; 
    } else { 
    $this->db->trans_complete(); 
    return false; 
    } 

ODER

$sql = "INSERT INTO `parking` (`userId`, `listId`, `createDate`, `alertReq`) VALUES ('27193', '14', '2017-02-23', '1')"; 
    $query = $this->db->query($sql); 

bei der Verwendung von

$this->output->enable_profiler(TRUE); 

in meinem Controller, alle oben genannten Abfragen erzeugen und zeigen:

INSERT INTO `parking` (`userId`, `listId`, `createDate`, `alertReq`) VALUES ('27193', '14', '2017-02-23', '1') 

in Profiler & sogar in Parktisch, die id-Spalte wird automatisch Zuwachs um 1 aber es gibt keine neuen Zeilen hinzugefügt Tabelle!!!

Wenn ich phpmyadmin oder adminer zum Einfügen dieser Zeile verwenden, funktionieren sie wie erwartet und ich kann sehen, dass die neue Zeile hinzugefügt wird. aber mit CI habe ich keinen Erfolg!

hier ist meine Tabellenstruktur:

CREATE TABLE `parking` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `userId` int(11) NOT NULL, 
    `listId` int(11) NOT NULL, 
    `createDate` date NOT NULL, 
    `alertReq` tinyint(1) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 

Ich habe versucht, die Parkplatz Tabelle zu löschen und neu erstellen, aber kein Erfolg. Ich habe auch versucht, eine andere Tabelle mit der gleichen Struktur und anderen Namen zu erstellen (sagen placingsss), wieder kein Erfolg.

+0

Haben Sie Fehlermeldungen in Ihrem 'config/Datenbank aktiviert haben .php' – RiggsFolly

+0

https://codeigniter.com/userguide3/database/transactions.html – RiggsFolly

+0

ja. Es gibt keine Fehler. Ich versuchte mit: $ this-> db-> trans_begin(); & $ this-> db-> trans_commit(); , aber kein Erfolg –

Antwort

-1

Es scheint, weil Sie String-Wert in ID, UserId und ListId verwenden. ändern versuchen, es in

$parkings = array (
    'userId' => 27193, 
    'listId' => 14, 
    'createDate' => '2017-02-23', 
    'alertReq' => 1 
); 
+0

kein Erfolg. Mit Strings oder Ints werde ich die gleichen Ergebnisse erhalten :( –

0

trans Versuchen Sie, wie https://codeigniter.com/userguide3/database/transactions.html#running-transactions-manually

Verwenden Sie eine db set() wie unten weniger Codezeilen dann

$this->db->trans_begin(); 

$data = array(
    'userId' => '27193', 
    'listId' => '14', 
    'createDate' => '2017-02-23', 
    'alertReq' => '1' 
); 

$this->db->set($data); 
$query = $this->db->insert('parking'); 

if ($this->db->trans_status() === FALSE) 
{ 
    $this->db->trans_rollback(); 

} else { 

    $this->db->trans_commit(); 
} 

return $query; // Returns only true or false; 
+0

danke. Ich habe Ihren Code jetzt versucht. Aber es hat nicht funktioniert. noch die ID Auto-Inkrement wird um 1, aber die Zeile wird nicht hinzugefügt! –

+0

add return false Nach dem Rollback sehen Sie, dass die Abfrage fehlschlägt – RaymondM