小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

中國PHP程序員都容易犯的一個錯誤:使用錯誤的自定義insert_id函數(shù)

 月影斜 2010-05-09
下面這個自定義insert_id()函數(shù),所有中國PHP程序員都奉行真理一般在自己的數(shù)據(jù)庫操作函數(shù)類中使用。殊不知它是一個完全錯誤的函數(shù),也許有一天你的應用莫名其妙的出錯而你又苦找尋不錯程序的任何錯誤時,那有可能就是你對這個錯誤的無知。說“中國PHP程序員都容易犯的一個錯誤”可能是夸張了點,但我至今看到所有的PHP開源應用中都是原版使用下面的函數(shù)。

function insert_id() {
return ($id = mysql_insert_id($this->link)) >= 0 ? $id : $this->result($this->query("SELECT last_insert_id()"), 0);
}

先說一下大家一直認為的此函數(shù)執(zhí)行:
mysql_insert_id函數(shù)只能正確返回INT型,當遇到BIGINT型就會返回錯誤數(shù)據(jù)(大家誤認為此時會返回小于0的錯誤數(shù)據(jù))。

$id = mysql_insert_id($this->link)) >= 0此函數(shù)這么寫的期望是:當最新插入的記錄ID是BIGINT型時會返回小于0的值。

此時,期望函數(shù)會執(zhí)行$this->result($this->query("SELECT last_insert_id()"), 0),返回正確的BIGINT型記錄ID。

錯誤就出現(xiàn)在大家對$id = mysql_insert_id($this->link)) >= 0的錯誤認識。

它永遠都不會像大家期望的那樣“當最新插入的記錄ID是BIGINT型時會返回小于0的值”,所以此函數(shù)永遠也不會執(zhí)行$this->result($this->query("SELECT last_insert_id()"), 0)語句,永遠也不會在新插入的記錄ID是BIGINT型時返回正確的ID給你。

我光這么說,也許大家會不信,那我就告訴大家一個簡單的驗證方法:

找一個你設(shè)置有auto_increment字段的表,使用ALTER TABLE `你的表名` AUTO_INCREMENT = 8030558188959576064(一個BIGINT型數(shù)字),接下來就不用說了,寫段小程序向表中插入記錄,調(diào)用上面insert_id自定義函數(shù),此時你就能看到我所描述的是正確的。

解決辦法:

直接把此函數(shù)調(diào)整成如下所示:

function insert_id()
{
return $this->result($this->query("SELECT last_insert_id()"), 0);
}

請大家支持我的知識和勞動,轉(zhuǎn)載時請不要刪除原創(chuàng)地址。

原創(chuàng):http://www./thread-2233-1-1.html(若你無權(quán)發(fā)帶連接內(nèi)容刪除此行)

原創(chuàng):/thread-2233-1-1.html

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多