以下是一个基本的PHP防止SQL注入的函数封装类的示例:

class Database {
    private $conn;
    
    public function __construct($host, $username, $password, $database) {
        $this->conn = new mysqli($host, $username, $password, $database);
        
        if ($this->conn->connect_error) {
            die("数据库连接失败: " . $this->conn->connect_error);
        }
    }
    
    public function query($sql, $params = array()) {
        $stmt = $this->conn->prepare($sql);
        
        if (!$stmt) {
            die("SQL语句错误: " . $this->conn->error);
        }
        
        $types = '';
        $values = array();
        
        foreach ($params as $param) {
            $types .= $this->getParamType($param);
            $values[] = $param;
        }
        
        $stmt->bind_param($types, ...$values);
        
        $stmt->execute();
        
        $result = $stmt->get_result();
        
        $stmt->close();
        
        return $result;
    }
    
    private function getParamType($param) {
        if (is_int($param)) {
            return 'i';
        } elseif (is_float($param)) {
            return 'd';
        } elseif (is_string($param)) {
            return 's';
        } else {
            return 'b';
        }
    }
}

使用示例:

$db = new Database('localhost', 'username', 'password', 'database');

$sql = "SELECT * FROM users WHERE username = ? AND password = ?";
$params = array('admin', 'password123');

$result = $db->query($sql, $params);

while ($row = $result->fetch_assoc()) {
    // 处理结果
}

$result->free();

$db->close();

这个类使用了预处理语句和参数绑定来防止SQL注入。在构造函数中创建了一个mysqli对象,然后在query方法中使用了预处理语句和参数绑定来执行SQL查询。getParamType方法根据参数的类型返回相应的类型标识符,用于绑定参数

php防止sql注入的函数封装类

原文地址: http://www.cveoy.top/t/topic/igeU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录