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->db);
【讨论】:
ID 是一个 auto_increment 字段。但是,如果这是第二个问题,我该如何解决呢? @user750079 尝试用$this->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的主要内容,如果未能解决你的问题,请参考以下文章