2012-05-04 28 views
1

我想插入數據到數據庫。我有一個表,名爲成員,有7列(ID,用戶,密碼,地址,電話,性別,電子郵件)。我用count來製作這樣的自動編號如何在php中使用count?

$no = "SELECT COUNT(ID)FROM member"; 
$nors = mysql_query($no); 
$nors = $nors + 1; 
$query = "INSERT INTO member VALUES (".$nors.",'".$user."','".md5($pass)."','".$name."','".$addr."',".$hp.",'".$gender."','".$email."')"; 

爲什麼,結果是6而不是2,雖然我只有1個數據?

+1

'$ nors = mysql_query($ no);' 這不會返回您的查詢的實際計數 –

+3

您可能想使用除md5以外的其他內容來存儲您的用戶密碼。它非常不安全。此外,您的代碼容易受到SQL注入的影響 – CountMurphy

+4

如果您使用此功能爲新成員生成下一個ID號碼,則應該將ID設置爲auto_increment字段,而不是像現在這樣,可能會得到兩個成員同時註冊,並且都獲得相同的ID。 – andrewsi

回答

6

mysql_query返回結果對象,而不是值。您的查詢還缺少需要的空間COUNT(ID)FROM之間...

$no = "SELECT COUNT(ID) AS count FROM member"; 
$result = mysql_query($no); 
$row = mysql_fetch_object($result); 
$nors = $row->count; 

您應該考慮使用更現代的東西像PDO,但是,作爲mysql_*功能已被棄用,最終將完全消失。

編輯: @andrewsi在評論中指出,你真的應該使用MySQL的內置ID自動增量功能,反正。比你現在做的要好得多。

+0

另外,它建議id爲主鍵,並插入像這樣:'「INSERT INTO成員(用戶,密碼,地址,電話,性別,電子郵件)VALUES('「。$ user。」','「。md5($ pass)。'','」。$ name。「','」。$ addr。「',」。$ hp。「, ''。$ gender。「','」。$ email「')」' –

+0

我剛剛從昨天學會了PHP,很抱歉,如果我的代碼變得簡單或老化了,我正在努力建立自己的想法。那麼當我想創建自動編號時,我應該怎麼做?我應該多少錢= 1;在$ nors = $ row-> count下;或者只是把$ nors插入插入? – greenthunder

+0

不要自己生成'$ nors'。讓MySQL爲你做。沒有必要的代碼,它解決了你目前的方法很多問題。請參閱@ andrewsi的回答。 – ceejayoz

2

替換該行

$nors = mysql_query($no); 

由這些線:

$result_handler = mysql_query($no); 
$result = mysql_fetch_array($result_handler); 
$nors = $result[0]; 
4

如果你想利用這個來生成一個新成員的下一個ID號,你應該看看使得ID爲AUTO_INCREMENT字段代替 - 現在,您可能會同時註冊兩個成員,並且都獲得相同的ID註冊號

+0

是的,我爲ID使用自動增量。但是我不知道如何使用它:( – greenthunder

+0

@ greenthunder只是不要插入任何id。數據庫會爲你做。很容易 – CountMurphy

+0

你的數據庫中的id行應該是這樣的:id INT(11) unsigned NOT NULL auto_increment – debianek

2

如果您的ID字段設置爲自動你不需要插入它的數字。 MySql會爲你處理。無論何時添加新行,自動編號都會增加。如果刪除一行,則自動編號不會遞減。

如果您當前只有1行,但您已添加和刪除行,則插入操作將生成一個ID不連續的行。

+0

是的,謝謝兄弟。我現在知道了 :) – greenthunder