Mysqli最后插入id不起作用

时间:2016-01-24 04:38:17

标签: php mysql mysqli

我正在尝试获取最后一个查询插入id。但我的代码总是返回零。

我的代码

private function Cnn()
{
    return mysqli_connect('localhost','root','root','db');
}
protected function MyCommandInsertId($sql)
{
    if(mysqli_query($this->Cnn(),$sql))
    {
        return mysqli_insert_id($this->Cnn());
    }
    $this->err = mysqli_error($this->Cnn());
    return false;
}

public  function Insert()
{

        $sql = "insert general_info(name,email,password)
        values('".$this->ms($this->name)."','".$this->ms($this->email)."','".md5($this->password)."')";
        //print''.$sql.'';

        $last_insert_id=$this->MyCommandInsertId($sql);

}

此处返回mysqli_insert_id($this->Cnn());始终返回零

3 个答案:

答案 0 :(得分:1)

根据 http://php.net/manual/en/mysqli.insert-id.php

有两个可能的问题

  1. 之前没有关于连接的查询
  2. 查询未更新AUTO_INCREMENT值
  3. 解决方案:

    1. 检查表中是否插入了新记录
    2. 检查您的字段是否为AUTO_INCREMENT。
    3. 通过CBroe,你是一个新的连接。 因此,它认为您没有插入新记录。

      重写函数Cnn()并将其更改为私有变量。

答案 1 :(得分:1)

请检查mysqli_insert_id的定义: -

mysqli_insert_id()函数返回最后一个查询中使用的id(使用AUTO_INCREMENT生成)。

这意味着表中具有AUTO_INCREMENT值的列不存在。

或者

在当前程序流程中,您的表格上没有以编程方式插入数据。由于代码中未触发插入查询,因此返回

注意: - 首先在代码中执行插入查询,然后检查mysqli_insert_id给出的输出是什么。然后你可以很容易地理解我想说的话。谢谢

我当地的一个工作案例就在这里: -

<?php
error_reporting(E_ALL);
ini_set('display_errors',1);
function Cnn()
{
    $conn = mysqli_connect('localhost','root','','stack');
    return $conn;
}
function MyCommandInsertId($sql)
{
    $conn = Cnn();
    if(mysqli_query($conn,$sql))
    {
        $lastid = mysqli_insert_id($conn);
        return $lastid;
    }else{
        $err = mysqli_error($conn);
        return $err;
    }

}
function Insert()
{
        $sql = "INSERT INTO bom(bom_description,product_id,finish_product,bom_quantity,UOM) values('Table cleaner','','','','')";
        $st_insert_id = MyCommandInsertId($sql);

        echo $st_insert_id;

}
Insert();
?>

输出: - http://prntscr.com/9u2iyv(插入的ID)和插入后的http://prntscr.com/9u2j6i(table视图

答案 2 :(得分:-2)

在我的情况下,我的sqli被声明在当前函数范围之外

$conn = new mysqli($dbhost, $dbuser, $dbpass, $dbname);

我需要做的是在global前面添加$conn

function want() {
    ///...... query stuff
    global $conn;
    $conn->insert_id; // Now works
}