php - 如何安全地将数据库连接变量传递到新页面?

标签 php mysql oop

您好,您可能会说这个问题已经得到解答,但请相信我,我在提问之前已经搜索了所有问题,但仍然感到困惑。我正在尝试将数据库连接变量 $conn 传递给新文件中的函数,但我不想在全局范围内执行此操作,因为它不安全。你能帮我解决这个问题并解释一下我该怎么做吗?我喜欢学习,不想要免费代码。到目前为止,这是我的代码:

下面是连接数据库的代码:

define('DBHOST','localhost');
define('DBUSER','root');
define('DBPASS','');
define('DBNAME','my_cms');

function connecting ($conn) {

    $conn = new mysqli(DBHOST, DBUSER, DBPASS, DBNAME);
    if(mysqli_connect_error())
    {
        die( "Sorry! Can't connect to the database." . mysqli_connect_error());
    }
}

这是我在 functions.php 文件中的登录功能代码

function login($user, $pass)
{  
    $user = $conn->real_escape_string($user);
    $pass = $conn->real_escape_string($pass);
    $password = md5($pass);
    $sql = $conn->prepare("SELECT * FROM members WHERE username = ? AND password=?");
    $result->bind_param("ss", $user, $password); 
    $result->execute() or die('Query failed. '); 

    if ($result->num_rows) 
    {
         $_SESSION['authorized'] = true;
         header('Location: '.DIRADMIN);
         exit();
    } 
    else 
    {
         $_SESSION['error'] = 'Sorry, wrong username or password';
    }
    $conn->close();
}

最佳答案

有多种方法和设计模式可供考虑。一种简单的方法是在单个文件中定义数据库连接功能,然后将该文件包含在需要访问数据库的任何页面中。例如:

在文件 database.inc.php 中:

<?php
define('DBHOST','localhost');
define('DBUSER','root');
define('DBPASS','');
define('DBNAME','my_cms');

$conn = new mysqli(DBHOST, DBUSER, DBPASS, DBNAME);
if(mysqli_connect_error())
{
    die( "Sorry! Can't connect to the database." . mysqli_connect_error());
}
?>

然后对于每个需要数据库连接的页面,执行以下操作:

<?php
require_once '...\database.inc.php';

function login($conn, $user, $pass)
{  
    $user = $conn->real_escape_string($user);
    $pass = $conn->real_escape_string($pass);
    $password = md5($pass);
    $stmt = $conn->prepare("SELECT * FROM members WHERE username = ? AND password=?");
    $stmt->bind_param("ss", $user, $password); 
    $stmt->execute() or die('Query failed. ');
    ....
}
...
?>

关于php - 如何安全地将数据库连接变量传递到新页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36512611/

相关文章:

PHP:trim() 不适用于两个变量

php - 如何修复 fsockopen 错误?

PHPMailer错误连接: opening to ssl://smtp. gmail.com :465,超时=300,选项=数组()

mysql - 如何在mysql View 中为每一行添加排名

mysql - 在 mysql 中连续增加单行中的计数器列是否不好?

c++ - 如何扩展一个函数

java - 有没有办法在 Java 中将 boolean 类型指定为泛型?

java - 没有抽象方法的抽象类

php - 如何将绝对文件路径转换为一个 CSS 可以使用的路径?

mysql:添加具有重复主键的整数值