-1

以下是我正在使用的功能。这很奇怪,因为当我测试名称“admin”时,它返回一个包含所有正确列和值的关联数组,但是据我所知,所有其他名称测试都返回 0,这意味着从查询中找不到任何内容(我正在输入名称与数据库中的名称完全一致)。

我有一种感觉,这可能是 pdo 的某种安全功能或其他东西,但我不明白为什么它会这样。

我正在使用mysql。

有谁知道这个问题以及如何解决它?谢谢!

function getUserDetailsByName($name, $fields = "*")
{   
    $db = connect_db();

    $query = "SELECT $fields FROM UserDetails WHERE userName=:username";
    $result = $db->prepare($query);
    $result->bindParam(":username", $name);

    if (!($result->execute())) {
        sendMessage (1,1,'Query failed',$query);
        $db = null;
        return;
    }
    if (!($result->fetch(PDO::FETCH_NUM) > 0)) {
        $db = null;
        return 0;
    }else{
        $result = $result->fetch();
        $db = null;
        return $result;
    }   
}

编辑:有人要求发布我如何调用该函数。

$user = getUserDetailsByName($_POST['value']);
if($user == 0)
{
  print "user = 0";
}
print_r($user);
4

1 回答 1

2
function getUserDetailsByName($name, $fields = "*"){
    $db = connect_db();

    $query = "SELECT {$fields} FROM UserDetails WHERE userName = :username LIMIT 1;";
    if(!$result = $db->prepare($query)){
        return null;
    }
    $result->bindParam(":username", $name);
    if(!$result->execute()) {
        sendMessage (1,1,'Query failed',$query);
        return null;
    }
    if(!$user = $result->fetch(PDO::FETCH_NUM)) {
        return false;
    }
    return $user;
}

为什么是 2 次抓取?结帐并将其与您的代码进行比较。

像这样使用:

if($user = getUserDetailsByName($_POST['value'])){
    // we have a user!
}else{
    // we don't have a user!
}
于 2013-07-07T19:50:50.923 回答