mysql_insert_id() 返回 0

Posted

技术标签:

【中文标题】mysql_insert_id() 返回 0【英文标题】:mysql_insert_id() returns 0 【发布时间】:2012-01-04 19:44:33 【问题描述】:

我知道有很多同名的主题。但主要是查询被插入了错误的位置。但我认为我把它放对了。 所以问题是,即使将数据插入数据库,我仍然得到 0。 有人知道我可能错的答案吗?

这是我的代码:

mysql_query('SET NAMES utf8');
    $this->arr_kolommen = $arr_kolommen;
    $this->arr_waardes = $arr_waardes;
    $this->tabel = $tabel;
    $aantal = count($this->arr_kolommen);
    //$sql="INSERT INTO `tbl_photo_lijst_zoekcriteria` ( `PLZ_FOTO` , `PLZ_ZOEKCRITERIA`,`PLZ_CATEGORIE`)VALUES ('$foto', '$zoekje','$afdeling');";
    $insert = "INSERT INTO ".$this->tabel." ";
    $kolommen = "(";
    $waardes = " VALUES(";
    for($i=0;$i<$aantal;$i++)
    
        $kolommen .=$this->arr_kolommen[$i].",";
        $waardes .="'".$this->arr_waardes[$i]."',";
    
    $kolommen = substr($kolommen,0,-1).")";
    $waardes = substr($waardes,0,-1).")";
    $insert .=$kolommen.$waardes;   
    $result = mysql_query($insert,$this->db)  or die ($this->sendErrorToMail(str_replace("  ","",str_replace("\r\n","\n",$insert))."\n\n".str_replace(" ","",str_replace("\r\n","\n",mysql_error()))));
    $waarde = mysql_insert_id();

提前非常感谢,因为我几乎已经为这个问题头疼了一整天。 (可能是一些小而愚蠢的事情)

【问题讨论】:

请显示表格方案。你有一个自动增量表字段吗? 您在查询中使用了特定的链接标识符 ($this->db),但不是用于 insert_id。这可能会导致它寻找另一个完整的连接。 "如果未指定链接标识符,则假定最后一个由 mysql_connect() 打开的链接。" @Topener:是的,我有自动增量表字段。 ID Int(11) Nee Geen AUTO_INCREMENT @PtPazuzu,我该如何解决这个问题? (谢谢两位的回答à 【参考方案1】:

根据manual mysql_insert_id 返回:

上一个查询为 AUTO_INCREMENT 列生成的 ID 成功,0 如果前一个查询没有生成 AUTO_INCREMENT 值,如果没有建立 MySQL 连接,则为 FALSE。

由于它没有给您false 并且不是正确的数字,因此表明查询的表没有生成自增值。

我能想到两种可能:

    您的表没有 auto_increment 字段 由于您没有提供指向 mysql_insert_id() 的链接,而是使用带有 mysql_query() 的链接,因此在检索最后插入的 id 时,它可能不是正确的表。

解决办法:

    确保它有一个 auto_increment 字段 同时提供链接:$waarde = mysql_insert_id($this-&gt;db);

【讨论】:

ID 是一个 auto_increment 字段。但是,如果这是第二个问题,我该如何解决呢? @user750079 尝试用$this-&gt;db 拨打mysql_insert_id,正如我在答案中提到的那样 @Marcus 抱歉,我读多了。但它奏效了。非常感谢。我写而不是 $this->db 真是太愚蠢了; $insert, $result(换句话说,所有其他变量,但忘记了 $this)。非常感谢。 $this->db 是什么意思?我的代码是这样的: mysql_query("INSERT INTO mytable (myColumn) values ('myValue');"); $id = mysql_insert_id(); 请同时给出资源名称,以防您得到 0。例如。 mysql_insert_id($connection)【参考方案2】:

您的 INSERT 查询可能不成功 - 例如,您可能试图在数据必须唯一的列上插入重复数据?

【讨论】:

【参考方案3】:

如果 id 确实设置为自动递增并且仍然得到“0”,因为您的响应是列和值计数,我后来才遇到这种情况,我注意到我的列计数与值计数不匹配。

【讨论】:

【参考方案4】:

Codeigniter 在调用 mysql_insert_id() 时有一个奇怪的行为。该函数在第一次调用后返回 0。所以调用它两次将返回 0。

使用变量而不是多次调用函数:

$id = mysql_insert_id();

【讨论】:

以上是关于mysql_insert_id() 返回 0的主要内容,如果未能解决你的问题,请参考以下文章

存储过程和 mysql_insert_id 问题

在php连接数据库中,怎么获取某一个表的某个列的id号?

mysql_insert_id 替代 postgresql

使用mysql_insert_id插入大量数据

mysql : 使用任何命令代替 mysql_insert_id();在 PHP 中?

PHPmysql_insert_id() 函数