数组中的PHP不能正常工作?
所以我想看看一组数字是否在一个数组中数组中的PHP不能正常工作?,php,Php,所以我想看看一组数字是否在一个数组中 array(3) { [0]=> array(2) { ["account_ID"]=> string(10) "1781890863" [0]=> string(10) "1781890863" } [1]=> array(2) { ["account_ID"]=> string(10) "2093832999" [0
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_数组时,它返回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.';
}
}
$app=new DB();
if(isset($\u GET['user'])){
if(在数组($\u GET['user'],$app->getAllID())中){
包括('account.php');
echo“账户确实存在”;
}否则{
变量转储($app->getAllID());
回显“
”。$\u GET['user']”不存在;
}
}
有人知道为什么我的代码在这里不起作用了吗?也许我只是访问数据库时出错了?你需要遍历
$app->getAllID()
,因为如果$\u GET['user']
在那里,它就会出现在$app->getAllID()[0]
,$app->getAllID()[1]
等等
实际上,您应该在带有WHERE子句的查询中检查
$\u GET['user']
,如果存在则返回true,如果不存在则返回false。为什么查询并返回所有帐户ID
s只是为了检查是否存在一个帐户ID?您的方法返回的是assoc数组,而不是int/string数组(您的检查是在该数组上进行的)
最简单的解决方案-将帐户ID向上拉一级
public function getAllID(){
$result_row = $this->accessDB( 'SELECT account_ID FROM users;');
return array_map(function($entry) { return $entry['account_ID']; }, $result_row);
}
更好的解决方案-使用DB查询进行验证:
// 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");
拉取查询结果的函数将返回多维数组。您可以在数组中循环以确定
$\u GET['user']
是否在中的每个数组中,或者更改提取用户ID的函数
在函数中,通过查询结果循环并构建数组:
$user_ids = array();
foreach ($result_row as $record) {
$user_ids[] = $record['account_ID'];
}
return $user_ids;
这将创建一个用户ID数组。然后您可以在数组()中使用
来确定用户id是否存在。变量转储的内容($app->getAllID());看起来像?返回$result\u行;将返回一个关联数组,因此您尝试的方式将无法使用var_dum($app->getAllID())
在上面。是$\u GET['user']0、1或2的值吗?$\u GET['user']的值应该是数组的一个项。当它被设置为其中一项时返回false,当它被设置为数组中的数字以外的数字时返回false。这是一个很好的解决方案。使用数组映射比我发布的答案更清晰。我还喜欢您提到的验证特定用户而不是查询所有用户ID。如果我要使用DB查询进行验证,我是否仍会返回数组映射
,还是返回$result\u row
?因为查询只返回一行中的一个字段(计数
),我会将该值转换为bool
。使用您给出的计算值的var格式,return(1=$result\u row[0][0])代码>应该适用于isUserFound($userId)