插入查询后,mysqli_insert_id()在同一连接上返回0

时间:2018-02-23 20:17:28

标签: php mysql insert auto-increment myisam

在你问之前,我已经使用了堆栈溢出和google的搜索功能!

在我的代码中,mysqli_insert_id总是返回0。

在我的'Model'-PHP-Class中,我的保存功能如下所示:

this.form = new FormGroup({
      firstName: new FormControl('', [Validators.required, validateName]),
      lastName: new FormControl('', [Validators.required, validateName]),
      email: new FormControl('', [Validators.required, validateEmail]),
      dob: new FormControl('', [Validators.required, validateDate])
    });

我的班级DB看起来像这样:

$result = DB::q($sql);

if(!$result)
{
    throw new Exception("Error:".mysqli_error(DB::getDB()));
}
else
{
    if(is_null($this->id))
    {
        $this->id = DB::insert_id();
    }
}

$this->update();

当我直接在同一数据库中的服务器上执行多查询时,它将正常工作:

class DB
{
    public static $db = null;

    public static function q($sql)
    {
        self::checkDB();

        if(!isset($sql) OR $sql == null OR $sql == "")
        {
            throw new Exception("\$sql may not be empty");
        }
        else
        {
            $result = mysqli_query(self::$db, $sql);
            if(!$result)
            {
                error_log($sql);
                throw new Exception(mysqli_error(self::$db));
                die();
            }

            return new DBResult($result);
        }
    }

    public static function checkDB()
    {
        if(is_null(self::$db))
        {
            self::$db = mysqli_connect(DB_PORT, DB_USERNAME, DB_PASSWORD, DB_DATABASE);

            if(!self::$db)
            {
                throw new Exception(mysqli_error(self::db));
            }
        }
    }

    public static function insert_id()
    {
        return mysqli_insert_id(self::$db);
    }
}

class DBResult
{
    private $result = null;

    public function __construct($result)
    {
        $this->result = $result;
    }

    public function fetch_assoc()
    {
        return mysqli_fetch_assoc($this->result);
    }

    public function fetch_object()
    {
        return mysqli_fetch_object($this->result);
    }

    public function __get($willget)
    {
        if($willget == "num_rows")
        {
            return mysqli_num_rows($this->result);
        }
        else
        {
            return $this->result;
        }
    }
}

我还在INSERT INTO users (name, age) VALUES ('personA', 42); SELECT last_insert_id() as k; 列上设置了AUTO_INCREMENT标记。

此外,我的代码中似乎没有任何地方可以覆盖id类中的$db

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:-1)

问题: 在Model Class中有这段代码:

if(is_null($this->id))
{
    $this->id = DB::insert_id();
}

出于某种原因,我不知道为什么,$this->id不是空的。取而代之的是0。 所以我所要做的就是将其改为

if(empty($this->id))
{
    $this->id = DB::insert_id();
}

感谢@Syscall。你帮我调试了这段代码。抱歉这个问题,但我想你们有些人都知道。整天编程,但作为一种爱好没有任何作用。