2012-12-07 95 views
1

我正在查詢一個數據庫以帶回員工編號,以便我可以使用它來驗證表單中的條目。我將結果轉儲到一個數組中,然後當有人在窗體上輸入一個數字時,我驗證它存在......它不工作,但從未找到數字。我認爲這是我創建陣列的方式。我在數組中找不到什麼......爲什麼?

$sql1 = "SELECT num FROM staff"; 
$data = array(); 
    $result1 = mysql_query($sql1, $conn) or die("db select error: " . $sql1); 
     while($row1 = mysql_fetch_assoc($result1)){ 
      $data[]= $row1; 
     } 
var_dump($data); 

$needle = 7034252; 
if(in_array($needle,$data)) 
    echo $needle . " found"; 
else 
    echo $needle . " not found"; 
+2

Offtopic,但我總是發現有趣的''返回'PHP'中的怪異數據或死亡。 –

+1

你有沒有試過「$ data = $ row1;」而不是「$ data [] = $ row1;」 –

+1

凱蒂,當你轉儲數據時,'$ data'會顯示數據嗎?如果是,則可能由於類型不匹配而失敗。你的針是一個int,而數組可能會把它作爲一個字符串。 – xbonez

回答

4

$ data是一個多維數組,雖然in_array需要一維數組。 您的意思是:

$sql1 = "SELECT num FROM staff"; 
$data = array(); 
    $result1 = mysql_query($sql1, $conn) or die("db select error: " . $sql1); 
     while($row1 = mysql_fetch_assoc($result1)){ 
      $data[]= $row1['num']; 
     } 
var_dump($data); 

$needle = 7034252; 
if(in_array($needle,$data)) 
    echo $needle . " found"; 
else 
    echo $needle . " not found"; 

這個代碼可以更短(和更有效),但:

$needle = 7034252; 
$sql = "SELECT COUNT(*) FROM staff WHERE num = " . mysql_real_escape_string($needle); 
if (mysql_result(sql, 0) > 0) 
    echo $needle . " found"; 
else 
    echo $needle . " not found"; 
-1

沒有測試,但你爲什麼不嘗試這樣的事情?

$sql1 = "SELECT num FROM staff"; 
$result1 = mysql_query($sql1, $conn) or die("db select error: " . $sql1); 
$needle = 7034252; 
while($row1 = mysql_fetch_assoc($result1)) 
{ 
    if ($needle == $row1['num']) 
    { 
     echo $needle . " found"; 
    } 
} 
+0

如果你的條件應該是'$ needle == $ row ['num']',或者你正在比較一個int數組。 – xbonez

+0

@xbonez是的,只是看到我錯過了,正在編輯它......謝謝! –

+0

所以,@桑德的上面第二個答案更有效率,但爲什麼downvote? –