【问题标题】:mysql_insert_id() returns 0mysql_insert_id() 返回 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,我该如何解决这个问题? (谢谢两位的回答à

标签: php mysql return mysql-insert-id


【解决方案1】:

根据manual mysql_insert_id 返回:

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

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

我能想到两种可能:

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

解决办法:

  1. 确保它有一个 auto_increment 字段
  2. 同时提供链接:$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();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-04-13
        • 2013-12-01
        • 1970-01-01
        • 2016-12-13
        • 2013-03-21
        • 2023-03-14
        相关资源
        最近更新 更多