2016-07-21 1 views
0

私のコードでは、MySQLテーブルに行が挿入されています(存在しない場合)。クエリにはユニークなインデックスが必要なので、ちょうど1(行番号8)の静的な値である$idを挿入しています。クエリに動的IDを使用するにはどうすればよいですか?

public function prepare($author, $arr) { 
    $conn = new mysqli($this->servername, $this->username, $this->password, $this->db_name); 

    foreach ($arr as $value) { 

     $stmt = $conn->prepare("INSERT IGNORE INTO kh_comments(id, author,abstract) VALUES (?, ?, ?)"); 

     $id = 1; // Just a static value 

     $stmt->bind_param("dss", $id, $author, $value['id']); 
     $stmt->execute(); 

     $stmt->close(); 
     $conn->close(); 
    } 
} 

1の代わりに動的な値を使用したいと考えています。変数$idは、どのIDが影響を受けているか把握するのに十分スマートでなければなりません。または、これを行う別の方法がある場合は、私は任意の提案に感謝!

MySQLで

enter image description here

+2

あなたの 'dbテーブル'に '自動インクリメントされたプライマリキー'を作成し、それをクエリから削除すると、すべてがうまくいくでしょう。 –

+0

テーブル定義のIDを自動インクリメントカラムとして設定します –

+0

@Anant 'id'はすでに'私はそれを私のクエリから削除すると、何ももう挿入することはできません。 – Reza

答えて

1

あなたがcreate tableまたはalter tableコマンドでAUTO_INCREMENT属性を使用してauto incrementフィールドを定義することができます:あなたはちょうどその列とMySQLの意志に任意の値を割り当てていない挿入中

CREATE TABLE animals (
    id MEDIUMINT NOT NULL AUTO_INCREMENT, 
    name CHAR(30) NOT NULL, 
    PRIMARY KEY (id) 
); 

その値を自動的に割り当てます。

INSERT INTO animals (name) VALUES 
    ('dog'),('cat'),('penguin'), 
    ('lax'),('whale'),('ostrich'); 

リンクドキュメントが言うように:

あなたはLAST_INSERT_ID()SQL関数またはにmysql_insert_id()C API関数を持つ最新自動的に生成されたAUTO_INCREMENT値を取得することができます。これらの関数は接続固有であるため、戻り値は挿入を実行する別の接続の影響を受けません。

mysqliでは、この値を取得するのにmysqli_insert_id() functionを使用してください。

0

idにはAUTO_INCREMENT値があります。あなたはそれの価値を置く必要はありません。私はこれがあなたの質問だと思う。