Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql LAST_INSERT_ID()和PHP INSERT_ID都返回0_Php_Sql_Mysqli_Last Insert Id_Insert Id - Fatal编程技术网

sql LAST_INSERT_ID()和PHP INSERT_ID都返回0

sql LAST_INSERT_ID()和PHP INSERT_ID都返回0,php,sql,mysqli,last-insert-id,insert-id,Php,Sql,Mysqli,Last Insert Id,Insert Id,我在谷歌上搜索了很多关于这个问题的信息,但什么也没找到。人们只是在最后一个插入id上复制MySQL文档,其他什么都没有 我有一个关于最后一个插入id的问题,因为对于这两种情况(php和sql),它都返回0 是:我设置了一个具有自动增量值的主字段和唯一字段 是的,我以前做过一些插入 否:使用INSERT和SELECT LAST进行双重查询。。。不起作用 我已经创建了一个用于维护连接和查询的类Db: class Db { private function connect() { $db =

我在谷歌上搜索了很多关于这个问题的信息,但什么也没找到。人们只是在最后一个插入id上复制MySQL文档,其他什么都没有

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

是:我设置了一个具有自动增量值的主字段和唯一字段 是的,我以前做过一些插入 否:使用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

而且它不起作用。

你所需要的只是常识

你们所描述的问题是一个不大可能的问题。所以-您必须再次检查。
现在已经有数百个问题了,其中开场白100%都是正确的。一开始。
在每一个数据库中,结果都是一个愚蠢的错误,比如插入一个数据库,然后从另一个数据库中进行选择

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

与其编写自己的类,不如使用现成的类,如


这样更安全、更方便。它返回insert id

NO:在获取最后一个insert\u id之前,我不会关闭连接;我在另一个注释的结尾处关闭它。“说话很便宜,让我看看代码!”。我们只有你的文字和粗略的代码草图,没有具体的、可复制的代码,包括表定义和输出,这个问题特别没有意义。只是因为当你详细阐述这样一个代码时,你会发现你的错误。现在呢?上面的代码返回0当您显示您的DB类时,我不太担心语句$last\u id=$this->connect()->insert\u id;不,你不明白。完整的代码,从表格创建到id输出。谢谢,粗体的注释让我意识到了我的错误。谢谢!