PHP in_array不能正常工作吗?

时间:2014-03-09 19:41:27

标签: php

所以我试图查看一组数字是否在数组中。

array(3) { 
     [0]=> array(2) { 
        ["account_ID"]=> string(10) "1781890863" 
        [0]=> string(10) "1781890863" 
      } 
     [1]=> array(2) { 
        ["account_ID"]=> string(10) "2093832999" 
        [0]=> string(10) "2093832999" 
      } 
     [2]=> array(2) { 
        ["account_ID"]=> string(10) "2147483647" 
        [0]=> string(10) "2147483647" } 
      } 

我有数组,值都在那里,一切都只是花花公子。但是当我使用in_array进行比较时,它返回false。我不太明白为什么。

class DB(){

    public function getAllID(){
        $result_row = $this->accessDB( 'SELECT account_ID FROM users;');
        return $result_row; 
    }
}

这是我用来访问数据库并返回数组然后

的函数
$app = new DB();
if(isset($_GET['user'])){
    if(in_array($_GET['user'],$app->getAllID())){
        include('account.php');
        echo 'Account DOES exist';
    } else {
        var_dump($app->getAllID());
        echo '<br/>'.$_GET['user'].' does NOT exist.';
    } 
}

有没有人知道为什么我的代码不起作用,也许我只是错误地访问了数据库?

3 个答案:

答案 0 :(得分:2)

您的方法返回assoc数组的数组,而不是返回int / string数组(您的检查工作正常)。

最简单的解决方案 - 将account_ID提升一级。

public function getAllID(){
    $result_row = $this->accessDB( 'SELECT account_ID FROM users;');
    return array_map(function($entry) { return $entry['account_ID']; }, $result_row); 
}

更好的解决方案 - 使用数据库查询进行验证:

// must escape $userId before doing query or you are vulnerable to SQL injection

$this->accessDB("SELECT count(account_ID) FROM users WHERE account_ID = {$userId} LIMIT 1");

答案 1 :(得分:0)

您需要循环浏览$app->getAllID(),因为$_GET['user']位于$app->getAllID()[0]$app->getAllID()[1]等。

实际上,您应该使用WHERE子句检查查询中的$_GET['user'],如果存在则返回true,否则返回false。为什么查询并返回所有account_ID只是为了检查是否存在?

答案 2 :(得分:0)

拉动查询结果的函数返回一个多维数组。您可以遍历数组以确定每个数组中是否有$_GET['user'],或者更改拉动用户ID的函数。

在你的函数循环中查询结果并构建你的数组:

$user_ids = array();
foreach ($result_row as $record) {
    $user_ids[] = $record['account_ID'];
}
return $user_ids;

这将创建一个用户ID数组。然后,您可以使用in_array()来确定用户ID是否存在。