sql LAST_INSERT_ID()和PHP insert_id都返回0

时间:2013-11-02 09:45:42

标签: php sql mysqli last-insert-id insert-id

我一直在搜索谷歌这个问题并且一无所获。人们只是继续在last_insert_id上复制MySQL文档而没有别的。

我遇到了关于last_insert_id的问题,因为对于这两种情况(php& sql),它都会返回0。

是的:我已经设置了PRIMARY&具有AUTO_INCREMENT值的UNIQUE字段 是的:我之前做了一些插入 NO:使用INSERT和SELECT LAST进行双重查询...不起作用。

我创建了一个用于维护连接的类Db&查询:

class Db
{
private function connect()
{
    $db = new mysqli($this->db_host, $this->db_user, $this->db_pass, $this->db_name, $this->db_port);
    if(mysqli_errno($db))
    {
        file_put_contents(date('Y-m-d').'mysql_error.txt',mysqli_error($db),FILE_APPEND | LOCK_EX);
        echo "Connection error";
        exit();
    }
    else
    {
        return $db;
    }
}

    public function insert($i_what, $i_columns, $i_values, $i_duplicate='') { 
    $insert = $this->connect()->query("INSERT INTO ".$i_what.$i_columns.$i_values.$i_duplicate);
    $last_id = $this->connect()->insert_id;
    $this->connect()->close();
    return $last_id; }
}

id  int(11)         AUTO_INCREMENT PRIMARY UNIQUE
name            varchar(32) utf8_general_ci     
firstname   varchar(64) utf8_general_ci
    lastname    varchar(64) utf8_general_ci

它不起作用。

1 个答案:

答案 0 :(得分:2)

你需要的只是常识。

您描述的问题是不可能的。所以 - 你必须再次检查。
已经有数百个问题,开场海报是100%,他们做的一切都是正确的。起初。
在其中的每一个中都发现了一个愚蠢的错误,比如插入一个数据库并从另一个数据库中选择。

正如我所说。是的,你没有关闭你的连接。出于某种原因,您只需为每个数据库调用打开一个全新的。难怪全新的清洁连接返回0。

不要自己写一个类,而是使用现成的类,比如https://github.com/colshrapnel/safemysql

这将是更安全和方便的方式。并返回插入ID