首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP日志记录

问PHP日志记录
EN

Stack Overflow用户
提问于 2014-04-25 20:49:45
回答 1查看 466关注 0票数 0
代码语言:javascript
复制
<?php

function login($database, $username, $password) {

$query = "SELECT * FROM `users` WHERE username=':username'";
$query = $database->prepare($query);

$query->execute(array(':username' => $username));

$rowcount = $query->rowCount();

    if($rowcount == 1){
        $row = mysql_fetch_array($query);
        $dbPass      = $row["password"];


            if($password == $dbPass){
                session_start();

                $dbId        = $row["id"];
                $dbUser      = $row["username"];
                $dbEmail     = $row["email"];
                $dbFirstname = $row["firstname"];
                $dbLastname  = $row["lastname"];

                        //Register Session Variables
                $_SESSION['id']        = $dbId;
                $_SESSION['username']  = $dbUser;
                $_SESSION['email']     = $dbEmail;
                $_SESSION['name']      = $dbFirstname." ".$dbLastname;

                return true;

            } else
                return false;
    } else
        return false;
}

?>

这是一个PHP代码片段,来自我正在全局转换为PDO的一个项目。这是登录页面的functions.php文件。显然,它没有完全转换为PDO,所以不要批评它,但是基本上在login.php文件中,我让它访问这个方法,并从表单中传递数据库(这是必需的)、用户名和密码。我设置了一个基本的查询,以查找具有表单用户名输入的所有用户。然后我准备,并执行查询。然后我需要一个行计数,所以我在查询上设置了一个运行rowCount()方法的rowCount变量,但是代码并没有移动到那里。当我回显它时,行计数是== 0,因此它不会继续执行下面的if语句。我是不是做错了PDO什么的?或者rowCount()。我怀疑我可能调用rowCount()太晚了,所以我尝试在执行$query之前将其向上移动,但没有成功。谢谢!

___EDIT___

代码语言:javascript
复制
<?php
session_start();


function login($database, $username, $password) {

$query = "SELECT * FROM `users` WHERE username=':username'";
$query = $database->prepare($query);

$query->execute(array(':username' => $username));

    if($query->rowCount()){
        $row = $query->fetch();
        echo $row;
        $dbPass      = $row["password"];


            if($password == $dbPass){

                $dbId        = $row["id"];
                $dbUser      = $row["username"];
                $dbEmail     = $row["email"];
                $dbFirstname = $row["firstname"];
                $dbLastname  = $row["lastname"];

                        //Register Session Variables
                $_SESSION['id']        = $dbId;
                $_SESSION['username']  = $dbUser;
                $_SESSION['email']     = $dbEmail;
                $_SESSION['name']      = $dbFirstname." ".$dbLastname;

                return true;

            } else {
                return false;
            }
    } else {
        return false;
    }
}

?>
EN

回答 1

Stack Overflow用户

发布于 2014-04-25 20:55:49

不要将pdo和mysql_函数混合在一起。绝不可能!

不要将password存储在纯文本中。绝不可能!相反,试试康帕特!

第一:

是要取代

$row = mysql_fetch_array($query);

使用

$query->fetchAll(PDO::FETCH_ASSOC)

第二:

session_start()应该出现在脚本的顶部,而不是在函数中。

第三:

是要取代

代码语言:javascript
复制
   $rowcount = $query->rowCount();
   if($rowcount == 1){
     //
   }

在这方面:

if($query->rowCount()){}

第四:

这太糟了!

代码语言:javascript
复制
           return true;

            } else
                return false;
    } else
        return false;
}

始终使用完整的分隔符。你在灌输一种恶习,这将永远困扰着你。

简单do

代码语言:javascript
复制
if($foo){
    if(){
       //do something
    }else if{
       //do something
    }else{
       //do something
    }
}

第五:

~不太好,但绝对比你的方法更好。

代码语言:javascript
复制
function small_query(pdo $pdo, $query, array $value){
    $stmt = $pdo->prepare($query);
    $stmt->execute($value);
    return $stmt->fetchAll(); 
}

$pdo = new PDO('mysql:host=localhost; dbname=foo', 'root', 'pass'); 

$result = small_query($pdo, "SELECT * FROM users WHERE name = ?", array($_POST['name']))

编辑。

既然你似乎非常喜欢你的代码,我就按你的方式做了。试试这个:

代码语言:javascript
复制
<?php

    session_start();

    function login($database, $username, $password){
        $query = "SELECT * FROM users WHERE username = ?";
        $stmt  = $database->prepare($query);
        $stmt->execute(array($username));

        if($stmt->rowCount()){
            $result = $stmt->fetchAll(PDO::FETCH_ASSOC); 

            $_SESSION["id"] = $result["id"];
            $_SESSION["username"] = $result["username"];
            $_SESSION["email"] = $result["email"];

            return true; 
        }else{
            return false; 
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23302767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档