Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / mysql

php预编译语句封装(php预处理语句)

作者:﹏尐甶园   发布日期:2025-01-08   浏览:338

PHP预处理语句(Prepared Statements)是一种用于执行SQL语句的安全方法,可以防止SQL注入攻击。预处理语句将SQL语句和参数分开处理,首先将SQL语句发送到数据库进行编译,然后再将参数发送到数据库进行绑定和执行。

以下是一个简单的PHP预处理语句封装示例:

class DB {
    private $conn;
    private $stmt;

    public function __construct($host, $username, $password, $dbname) {
        $dsn = "mysql:host=$host;dbname=$dbname;charset=utf8mb4";
        $options = [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_EMULATE_PREPARES => false
        ];

        try {
            $this->conn = new PDO($dsn, $username, $password, $options);
        } catch (PDOException $e) {
            throw new Exception("Connection failed: " . $e->getMessage());
        }
    }

    public function prepare($sql) {
        $this->stmt = $this->conn->prepare($sql);
    }

    public function bind($param, $value, $type = null) {
        if (is_null($type)) {
            switch (true) {
                case is_int($value):
                    $type = PDO::PARAM_INT;
                    break;
                case is_bool($value):
                    $type = PDO::PARAM_BOOL;
                    break;
                case is_null($value):
                    $type = PDO::PARAM_NULL;
                    break;
                default:
                    $type = PDO::PARAM_STR;
            }
        }

        $this->stmt->bindValue($param, $value, $type);
    }

    public function execute() {
        return $this->stmt->execute();
    }

    public function fetchAll() {
        return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
    }

    // 其他数据库操作方法...
}

使用示例:

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

$db->prepare('SELECT * FROM users WHERE id = :id');
$db->bind(':id', 1);
$db->execute();

$results = $db->fetchAll();

foreach ($results as $row) {
    echo $row['username'] . '<br>';
}

在上述示例中,DB类封装了数据库连接和预处理语句的相关操作。通过调用prepare方法来准备SQL语句,使用bind方法绑定参数,然后调用execute方法执行SQL语句。最后,使用fetchAll方法获取查询结果。

这样做可以有效地防止SQL注入攻击,因为预处理语句会将参数值进行转义和编码,确保安全地将参数传递给数据库。

上一篇:htmldiff php

下一篇:php代码实现打印功能(php打印语句)

大家都在看

php 发送qq邮件(php收发邮件)

php按键按下事件(php单击按钮的几种实

php 加密 易语言解密(易语言post解

php redis定时器

php倒立乘法口诀(php乘法口诀表倒三角

php获取汉字的拼音(php汉字转拼音代码

php读取手机型号(手机如何读取php文件

php数据怎么转换常量(php中的数据类型

更改php-fpm(更改实名认证)

php 条件同时成立

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站