0

我一直在谷歌上搜索这个问题,但真的一无所获。人们只是继续在 last_insert_id 上复制 MySQL 文档,仅此而已。

我有一个关于 last_insert_id 的问题,因为对于这两种情况(php 和 sql)它都返回 0。

是:我设置了一个具有 AUTO_INCREMENT 值的 PRIMARY 和 UNIQUE 字段 是:我在否之前做了一些插入:使用 INSERT AND 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

它不起作用。

4

1 回答 1

2

你需要的只是常识。

你描述的问题是不可能的。所以 - 你必须再次检查。
已经有数百个问题,开放海报是 100% 他们做的一切都是正确的。首先。
在他们每个人中,结果都是一个愚蠢的错误,比如插入一个数据库并从另一个数据库中进行选择。

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

与其编写自己的类,不如使用现成的类,例如https://github.com/colshrapnel/safemysql

这将更加安全和方便。它返回插入 id

于 2013-11-02T09:50:20.917 回答