2016-05-02 19 views
0

私は、mysql & phpでライブラリ管理システムを構築するクラスプロジェクトを持っています。レコードを挿入する良い方法はありますか?

書籍、オーディオ、ビデオの3つのアイテムがあります。それぞれには異なる属性と1つの項目IDがあります。

TABLES:

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

はしかし、私は特定のテーブルや項目テーブルの両方に項目を追加するために3つのSQL文を使用する必要があります。これには良い方法がありますか?私は実際にはITEMクラスを必要としません、私はそれをより一般的に使用します。それがなければそれは悪いですか?

これは使い方です。ところで

$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

これは現在の問題を特に修正するものではありませんが、ブック、オーディオ、ビデオがすべて1つのテーブルに表示されるようにテーブルの順序を並べ替えると、表示される情報の種類を区別する列があります。 (Wordpressのようなものがカスタムの投稿の種類と同じです) – Jhecht

答えて

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

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

あなたのクエリが道より読みやSQLインジェクションから保護されますプリペアドステートメントを使用している場合。

+0

ありがとうございます、私は準備文について知りませんが、今検索します。 –

+0

2番目のinsert文では、最後に挿入されたITEMテーブルを指定しません。方法は、IDを取る方法は? –

+0

'last_insert_id()'は最後の挿入のIDを返します。したがって、そのクエリは正しいIDを取得します。あなたの2番目のクエリは役に立ちません:)それは 'select id from t where id = 123'と似ています。さて結果は '123 'になるでしょう。 –

関連する問題