php - 迁移到 mysqli

标签 php mysql mysqli

<分区>

我已经决定转移到 mysqli,因为当人们发现我的 mysql 代码时,我总是被激怒:-)

有人可以验证以下内容是否正确,一切正常,但我只是想确保在进入网站的其余部分之前我没有做愚蠢的事情或存在安全风险。 这是用于在登录时检查用户名/密码的 php。

<?php
//Start session
session_start();

//Include database connection details
require_once('db_connect.php');

//Array to store validation errors
$errmsg_arr = array();

//Validation error flag
$errflag = false;


// cleanup POST variables
$username = mysqli_real_escape_string($mysqli, stripslashes(trim($_POST['username'])));
$password = mysqli_real_escape_string($mysqli, stripslashes(trim($_POST['password'])));

//Input Validations
if($username == '') {
    $errmsg_arr[] = 'Username required';
    $errflag = true;
}
if($password == '') {
    $errmsg_arr[] = 'Password required';
    $errflag = true;
}

//If there are input validations, redirect back to the login form
if($errflag) {
    $_SESSION['ERRMSG_ARR'] = $errmsg_arr;
    session_write_close();
    header("location: logon.php");
    exit();
}

//Load and run query
$result = mysqli_query($mysqli, "SELECT * FROM auth WHERE username='$username' AND password='$password'");

if ($result->num_rows) {
//Login Successful
        session_regenerate_id();
        //Set session variables
        $member = $result->fetch_assoc();
        $_SESSION['SESS_MEMBER_ID'] = $member['ID'];
        $_SESSION['SESS_USERNAME'] = $member['username'];
        $_SESSION['SESS_FIRST_NAME'] = $member['fname'];
        $_SESSION['SESS_PASSWORD'] = $member['password'];
        $_SESSION['SESS_AUTH_LEVEL'] = $member['auth_level'];
        session_write_close();
        header("location: index");
        exit();
    }else {
        //Login failed
        $errmsg_arr[] = 'user name or password not found';
        $errflag = true;
        if($errflag) {
            $_SESSION['ERRMSG_ARR'] = $errmsg_arr;
            session_write_close();
            header("location: logon.php");
            exit();
        }
    }
mysqli_close($mysqli); 
?>

非常感谢!

最佳答案

好吧,您会想在这里使用准备好的语句,因为您没有执行静态 SQL 查询——这就是mysqli_query() 用于。

所以,这是您需要做的:

  1. 不要理会 //清理 POST 变量 部分。

  2. 更改 //Load and run query 部分以使用准备好的语句。

  3. 首先,我们要准备它:http://php.net/manual/en/mysqli.prepare.php

    $query = mysqli_prepare($mysqli, "SELECT * FROM auth WHERE username=? AND password=?");

  4. 那我们要给Mysqli带来什么?标记为:http://www.php.net/manual/en/mysqli-stmt.bind-param.php

    $query->bind_param('ss', $username, $password);

然后,使用 bind_resultfetch(参见 http://www.php.net/manual/en/class.mysqli-stmt.php 处的索引)获取结果并存储到 session 变量中。

关于php - 迁移到 mysqli,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16921090/

相关文章:

php - 使用名称作为键将变量推送到数组?

php - 如何在 PHP 中跟踪失败的下载?

mysql - 将信息发送到 Dashing 中的小部件

PHP将变量传递给我自己的MySQL函数--DB使用变量作为列名

php - 将 .csv 中的 Mysqli 中的 ","中的分隔符 ";"更改为

PHP & MySQL : How to get values between two dates including both of them

php - Outlook API 中的 403 错误访问被拒绝

mysql - 有没有办法组合这两个 MySQL 语句?

mysql - 如何使用 Laravel 的 eloquent 使非主列在返回的结果集中唯一?

php - Mysqli 准备语句插入不插入