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
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站