【问题标题】:Function giving correct answer in one case, not in any others在一种情况下给出正确答案的函数,而不是在任何其他情况下
【发布时间】:2013-07-05 03:16:17
【问题描述】:

以下是我正在使用的功能。这很奇怪,因为当我测试名称“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);

【问题讨论】:

  • 请说明你是如何调用函数的!此外,最后的else 毫无意义。不像以前的if + return 会超越return

标签: php mysql database pdo return


【解决方案1】:
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!
}

【讨论】:

  • 啊哈,我没有意识到它会两次获取最高值,我现在将对其进行编辑,看看它是否有所作为。虽然我很好奇它是如何与一个名字而不是另一个名字一起工作的?
  • @AndrewB Duplicate DB records ?:) admin 有两次。
  • @AndrewB 还要记住LIMIT 1 部分。当你知道你只需要一条记录时,如果 MySQL 也知道这一点,它会很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-08
  • 2020-02-03
  • 1970-01-01
  • 2014-04-12
相关资源
最近更新 更多