PDO / PHP LoginScript使用MAMP以错误500结尾

时间:2016-04-02 10:24:08

标签: php mysql pdo

我已经尝试了一段时间来使我的loginscript工作,我似乎无法找到问题,或者我只是盲目或者还有其他事情发生在这里。

如果我在表格中输入正确的凭证并不重要,我仍然会得到一个可爱的错误500.

有什么想法吗?

数据库连接功能:

function db_connect() {

如果我移动此列 - >

    $server = 'localhost';
    $uname = 'root';
    $passw = 'password';
    $datab = 'database';

    /* check connection */
    try{
        $conn = new PDO("mysql:host=$server;dbname=$datab;", $uname, $passw);
    } catch(PDOException $e) {
        die( "Connection failed: " . $e->getMessage());
    }

< ---

   return $conn; /added this as suggested, still returns NULL.
}

登录文件:

include('../lib/functions.php'); //This is correct!
db_connect();

< - HERE,它有效 - >

之前有一个问题,即我的密码哈希在注册过程中出错,因此password_verify($_POST['password'], $results['passw'])无效,即使输入正确也始终返回false。

if(!empty($_POST['username']) && !empty($_POST['password'])):

    $records = $conn->prepare('SELECT uname,passw FROM users WHERE uname = :user AND passw = :pass');
    $records->bindparam(':user', $_POST['username']);
    $records->bindparam(':pass', $_POST['password']);
    $records->execute();
    $results = $records->fetch(PDO::FETCH_ASSOC);

    if(count($results) > 0 && password_verify($_POST['password'], $results['passw']) && $_POST['username'] == $results['uname']) //Also tried removing the &&-->username area incase two and statements were wrong without any luck {
        die('It works!');
    } else  {
        die('OR NOT!');
    }

endif;

1 个答案:

答案 0 :(得分:1)

您的db_connect()函数在其自己的范围内定义了$conn。因此,变量$conn是本地的。在db_connect()结束后执行$conn只会消失。

在此功能之外$conn只是 NULL

$conn从函数返回到外部作用域:

function db_connect() {
    $server = 'localhost';
    $uname = 'root';
    $passw = 'password';
    $datab = 'database';

    /* check connection */
    try{
        $conn = new PDO("mysql:host=$server;dbname=$datab;", $uname, $passw);
    } catch(PDOException $e) {
        die( "Connection failed: " . $e->getMessage());
    }

    return $conn;    // here
}

在你的剧本中:

include('../lib/functions.php'); //This is correct!
$conn = db_connect();
// other codes