所以我试图查看一组数字是否在数组中。
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.';
}
}
有没有人知道为什么我的代码不起作用,也许我只是错误地访问了数据库?
答案 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是否存在。