2010-12-13 57 views
0

我有一個腳本,其後應該從我的sql表中的字段「UserID」收集數據,將所有數據提交到數組中,然後將變量與數組中的值進行比較。如果變量的值已經存在於數組中,請告訴用戶該值無效。我需要$ users的輸出等同於數組('user1','user2','user3'); 發生了什麼是數據從$ user_name形式進來。我想要在如下聲明中使用它:使用foreach函數格式化數組輸出

我試過使用提取函數,但那只是創建了一個大混亂。 林不知道什麼是我在做什麼不正確,除非作爲一個數組的$用戶的格式不能被解析in_array()函數,因爲它是目前的格式。任何意見非常感謝。謝謝!

回答

0

也許我失去了一些東西......爲什麼不去做這樣的:

SELECT UserID FROM Users WHERE Username = 'username' 

那麼就使用mysql_num_rows()檢查,如果用戶名已經存在。這應該更快,更高效(記憶方面)。

1
$sql = "SELECT USERID FROM Users" ; 

$result = mysql_query($sql); 

$users = array(); 

while(($user = mysql_fetch_assoc($result))) { 
$users[] = $user['USERID']; 
} 

當你說

$users[] = $user; 

你是不是在結果集被追加到數組,指定哪一列。

0

在這種情況下,您將收集數據庫中的所有數據,並且還需要在PHP中執行一些效率低下的處理。這是更好地查詢該值,看它是否是在數據庫中,所以:

$username = mysql_real_escape_string($username); 
$query = " 
    select 
    count('x') as usercount 
    from 
    users u 
    where 
    u.username = '$username'"; 

的,如果'USERCOUNT位爲0,用戶名不存在。如果> 0,則用戶名確實存在。通過這種方式,您可以讓數據庫執行其設計要完成的工作,而實際上被檢索的唯一值就是該單一數字。

0

你試過修改你的查詢嗎?目前,您已獲得每個用戶的所有值,但您剛剛看到需要UserID。你可以這樣做:

$sql = "SELECT UserID FROM Users"; 
$result = mysql_query($sql); 

$users = array(); 

while(($user = mysql_fetch_assoc($result))) 
{ 
    $users[] = $user['UserID']; 
} 

// ... 
if (in_array($user_name, $users)) 
{ 
    echo 'Username not available'; 
} 
else 
{ 
    echo 'Username available'; 
} 

或者您也可以查找在數據庫中指定用戶名:

$sql = 'SELECT count(*) FROM Users WHERE UserID = '.mysql_escape_string($user_name); 
$result = mysql_query($sql); 

// and then just check if the resulting row is equal to 0 
0

您是否試圖寫一個腳本,如果用戶名是採取將檢查?

如果是這樣,那麼爲實現此目的而構建實際查詢可能更容易(也更有效),而不是依賴於程序化方法。

$sql = "SELECT COUNT(*) FROM Users WHERE Username = '$username'"; 

然後,你可以這樣的結果適用於數量,並允許用戶基於某個值是否大於零(用戶已經採取了這個名字)或沒有(其免費)返回註冊或沒有。

+0

當然,你不應該把未經過轉義的$用戶名放入你的SQL中,除非你急於找出其他人可以通過SQL注入來做什麼。 – 2010-12-13 20:29:35

+0

當然 - 我僅僅提供這個作爲COUNT查詢的一個例子,因爲OP似乎沒有意識到它。這永遠不會用於插入或驗證登錄。我通常在所有數據庫訪問中使用PDO來證明這一點。 – DeaconDesperado 2010-12-13 20:31:57

0

如前所述,這是檢查現有用戶名的一種相當低效的方式。修改你的查詢的建議是很好的建議。

然而,爲了解決與你提供的代碼的問題:

in_array()將不檢測在一個多維數組的值的存在。你$users陣列可能看起來是這樣的:

$users = array(
    array('userID', 'foo', 'bar'), 
    array('userID', 'foo', 'bar'), 
    array('userID', 'foo', 'bar') 
) 

in_array不會搜索第一套指標以下。如果這真的是你想要做的,看到這個問題:in_array() and multidimensional array