Php MySQL::为SELECT查询返回非零值的insert_id

Php MySQL::为SELECT查询返回非零值的insert_id,php,mysql,insert,last-insert-id,mysql-insert-id,Php,Mysql,Insert,Last Insert Id,Mysql Insert Id,我刚刚花了4个小时跟踪脚本中的一个bug。我一直收到以下错误: 调用非对象上的成员函数fetch\u assoc 当我做一些类似的事情时,这是被抛出的: $query = $database -> query("SELECT .....") while($q = $query) {...} 我的database->query方法如下:(其中$database->mysqli是mysqli对象) 现在,这将返回插入行的插入自动增量id,否则返回查询结果。我刚刚发现,如果我先运行一个inse

我刚刚花了4个小时跟踪脚本中的一个bug。我一直收到以下错误:

调用非对象上的成员函数fetch\u assoc

当我做一些类似的事情时,这是被抛出的:

$query = $database -> query("SELECT .....")
while($q = $query) {...}
我的
database->query
方法如下:(其中
$database->mysqli
mysqli
对象)


现在,这将返回插入行的插入自动增量id,否则返回查询结果。我刚刚发现,如果我先运行一个insert查询,然后运行一个select查询,那么第二个查询将返回预先运行的insert查询的insert id。这真的是预期的行为,还是我在这里遗漏了什么?

last\u insert\u id()将返回同一会话中最后一条insert语句的自动增量值,无论何时。我不知道你对使用这个函数有什么期望。这对我来说没有意义。从文档中:`如果最后一个查询不是INSERT或UPDATE语句,或者如果修改的表没有具有AUTO_INCREMENT属性的列,此函数将返回零。`MySQL非常清楚:没有参数,最后一个_INSERT_ID()返回一个64位值,该值表示作为最近执行的INSERT语句的结果,为自动增量列成功插入的第一个自动生成的值。甚至有一个例子,中间有一个选择。API的作用可能不同。返回最后插入行的ID或序列对象的最后一个值,具体取决于底层驱动程序。函数的作用是:返回一个表的查询生成的id,该表的列具有AUTO_INCREMENT属性。如果最后一个查询不是INSERT或UPDATE语句,或者如果修改后的表没有具有AUTO_INCREMENT属性的列,则此函数将返回零。嗯,我很困惑。我在这里引用PHP文档:
function query($stmt) {
    $query = $this -> mysqli -> query($stmt);
    $id = $this -> mysqli -> insert_id;
    return $id === 0 ? $query : $id;
}