如何为查询使用动态ID?

时间:2016-07-21 12:34:02

标签: php mysql sql

在我的代码中,我在MySQL表中插入一行,如果它不存在的话。由于查询需要唯一索引,我只是插入$id,这只是1的静态值(第8行)。

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受到影响。或者,如果有其他方法可以做到这一点,我感谢任何建议!

enter image description here

2 个答案:

答案 0 :(得分:1)

在MySQL中,您可以使用create tablealter table命令中的AUTO_INCREMENT属性定义auto increment个字段:

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

在插入过程中,您只是不为该列分配任何值,MySQL将自动为您分配其值:

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来检索此值。

答案 1 :(得分:0)

id具有AUTO_INCREMENT值。您不必为其设置值。我想这是你的问题。