關于mysql_insert_id()的大疑惑
求助各位:我遇到一個十分費解的問題!
在mysql.func.php中我們有兩段函數,其中一個是insert($table,$array),返回的是mysql_insert_id(),而后面我們又創建了一個函數getInsertId(),只有一個語句:return mysql_insert_id(); ? ?我于是覺得,前一個函數不是已經有后一函數的功能了嗎? ? 但我發現其中有問題。發現還真不能用addAlbum()函數(以為insert返回mysql_insert_id)代替getInsertId(),但是為什么呢? ?
function?addAlbum($arr){ insert("imooc_album",$arr); }
上面是addAlbum函數,
以下為問題代碼,是pro.inc.php中的部分代碼:
$res=insert("imooc_pro",$arr); //?$pid=getInsertId(); //?echo?$res.$pid;??調試用的,發現$res?和$pid的值一樣,所以我就不用getInsertId()了 echo?"immoc_pro:".$res."<br>"; //如果插入成功 if($res){??//省略了&&$pid? ????foreach($uploadFiles?as?$uploadFile){ ????????$arr1['pid']=$res; ????????$arr1['albumPath']=$uploadFile['name']; ????????print_r($arr1); ????????echo?"<br>"; ????????$affectedRow=addAlbum($arr1); ????????//?$affectedRow=getInsertId();??如果這樣就可行,但像上面一行這樣就不行,可他們返回的都是mysql_insert_id() ????????echo?"imooc_album:".$affectedRow."<br>"; ????????if($affectedRow){ ????????????$mes="添加成功!<a?href='addPro.php'?target='mainFrame'>繼續添加</a>"; ????????}else{ ????????????$mes="addAlbum?failed!"; ????????} ????} }
在添加商品欄目添加一些信息和圖片(內容隨便打的),發現
這段函數輸出的結果如下:
immoc_pro:30
Array ( [pid] => 30 [albumPath] => 00da9f030a4267855d0d705cc6d224cb.jpg )?
insert into imooc_album (pid,albumPath) values('30','00da9f030a4267855d0d705cc6d224cb.jpg')
imooc_album:
Array ( [pid] => 30 [albumPath] => 76d357dfa1e1570ddd6d47785e980bd9.jpg )?
insert into imooc_album (pid,albumPath) values('30','76d357dfa1e1570ddd6d47785e980bd9.jpg')
imooc_album:
Array ( [pid] => 30 [albumPath] => a4a6178694fa05aef62c233d296bde36.jpg )?
insert into imooc_album (pid,albumPath) values('30','a4a6178694fa05aef62c233d296bde36.jpg')
imooc_album:
addAlbum failed!
我們發現imooc_pro有mysql_insert_id()返回的值而imooc_album卻沒有值。想了半天也沒發現為什么!
其他一切都正常的,數據都插入表了,imooc_album里面也有pId和albumPath,沒有問題。
求大神解惑!
2016-03-09
小伙伴們,我自己找到原因了,分享一下吧:
其實很簡單,但是容易忽略??!是因為:
沒有返回值,導致insert返回的mysql_insert_id()丟失了。
這樣寫就沒有問題了: