2016-05-02 15 views
0

Ich habe ein Klassenprojekt, das ein Bibliotheksverwaltungssystem mit mysql & PHP erstellt.Gibt es eine bessere Möglichkeit, Datensätze einzufügen?

Ich habe 3 Elemente in der Bibliothek: Bücher, Audios und Videos. Jeder hat unterschiedliche Attribute und eine Item-ID.

TABELLEN:

ITEM(item_id A.INCREMENT, TYPE) 
BOOK(b_id,name,author etc.) 
VIDEO(v_id, ETC.) 
AUDIO(a_id, ETC.) 

aber ich habe 3 SQL-Anweisungen verwenden, um Elemente sowohl Tabelle bestimmte Tabelle und Element hinzuzufügen. Gibt es einen besseren Weg dazu? Ich brauche eigentlich keine ITEM Klasse, ich benutze es nur um allgemeiner zu sein. Ist es ohne es schlecht?

Dies ist, was verwendet wird.

$sql="INSERT INTO ITEM values(NULL,'BOOK') "; 
     $query = $this->db->query($sql); 
     $sql="SELECT ID as id FROM ITEM WHERE ID=last_insert_id()"; 
     $query=$this->db->query($sql)->row_array(); 
     $name = $book_name; 

     $sql = "INSERT INTO BOOKS values ('".$query['id']."','".$name."','".$author."','".$title."','".$year."','".$price."','AVAIBLE',NOW(),'0')"; 
     $query = $this->db->query($sql); 
+0

Während dies Ihr aktuelles Problem nicht besonders behebt, würde ich vielleicht meine Tabellen neu anordnen, so dass Bücher, Audio und Video alle in einer Tabelle sind, mit einer Spalte, um zu unterscheiden, welche Art von Information angezeigt wird. (Ähnlich wie Wordpress mit benutzerdefinierten Post-Typen) – Jhecht

Antwort

0
INSERT INTO ITEM (`type`) values ('BOOK'); 

INSERT INTO BOOKS (b_id, name, author) 
select last_insert_id(), '$name', '$author'; 

BTW, wenn Sie verwenden Prepared Statements Ihre Anfragen Art und Weise besser lesbar und gegen SQL-Injections geschützt sein wird.

+0

Vielen Dank, ich weiß nicht über vorbereitete Aussagen, aber ich werde jetzt suchen. –

+0

In der zweiten Einfügeanweisung geben Sie nicht die zuletzt eingefügte ITEM-Tabelle an. Wie wird die Methode die ID nehmen? –

+0

'last_insert_id()' gibt die ID der letzten Einfügung zurück. Diese Abfrage benötigt also die richtige ID. Ihre zweite Abfrage ist nutzlos :) Das ist wie Schreiben 'select id from t where id = 123'. Nun, das Ergebnis wäre "123". –

Verwandte Themen