在PHP中,防止SQL注入是非常重要的安全措施,下面是一个名为_PHP
的简单防SQL注入类的例子:
(图片来源网络,侵删)
class _PHP { private $connection; public function __construct($host, $username, $password, $database) { $this->connection = new mysqli($host, $username, $password, $database); if ($this->connection->connect_error) { die("Connection failed: " . $this->connection->connect_error); } } public function query($sql, $params = []) { if (!empty($params)) { $stmt = $this->connection->prepare($sql); if ($stmt === false) { die("Prepare failed: " . $this->connection->error); } $types = ''; $values = []; foreach ($params as $key => &$value) { if (is_int($value)) { $types .= 'i'; } elseif (is_float($value)) { $types .= 'd'; } elseif (is_string($value)) { $types .= 's'; } else { $types .= 'b'; } $values[] = &$value; } $values = array_merge([$types], $values); call_user_func_array([$stmt, 'bind_param'], makeValuesReferenced($values)); if ($stmt->execute() === false) { die("Execute failed: " . $stmt->error); } $result = $stmt->get_result(); if ($result === false) { die("Get result failed: " . $stmt->error); } $data = []; while ($row = $result->fetch_assoc()) { $data[] = $row; } $stmt->close(); return $data; } else { $result = $this->connection->query($sql); if ($result === false) { die("Query failed: " . $this->connection->error); } $data = []; while ($row = $result->fetch_assoc()) { $data[] = $row; } return $data; } } public function close() { $this->connection->close(); } } function makeValuesReferenced($arr) { $refs = []; foreach ($arr as $key => $value) { $refs[$key] = &$arr[$key]; } return $refs; }
使用方法:
1、创建一个新的_PHP
对象,传入数据库连接参数(主机名、用户名、密码和数据库名)。
2、使用query
方法执行SQL查询,可以传递参数数组来避免SQL注入。
3、关闭数据库连接。
示例代码:
(图片来源网络,侵删)
$db = new _PHP('localhost', 'username', 'password', 'database'); $users = $db->query('SELECT * FROM users WHERE id = ?', [1]); print_r($users); $db->close();
这个简单的防SQL注入类使用了预处理语句和绑定参数的方法来确保用户输入的数据不会被解释为SQL代码的一部分,从而避免了SQL注入攻击。
(图片来源网络,侵删)
本文来源于互联网,如若侵权,请联系管理员删除,本文链接:https://www.9969.net/54550.html