php防止sql注入的函数封装类
以下是一个基本的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方法根据参数的类型返回相应的类型标识符,用于绑定参数
原文地址: http://www.cveoy.top/t/topic/igeU 著作权归作者所有。请勿转载和采集!