Сделал вот такую защиту от инъекций PHP: class check { public function checkVar($var, $count) { if(!empty($var)) { if(!ctype_digit($var) or strlen($var) > $count) { exit(); } } } public function checkStr($var, $count) { if(!empty($var)) { if(!ctype_alpha($var) or strlen($var) > $count) { exit(); } } } } $check->checkVar($id_building, 5); $result = $mysqli->query("SELECT * FROM `all_buildings` WHERE `id` = '$id_building"); Как по мне этого достаточно, но, хочется увидеть мнение знающих людей, что не так и как сделать лучше.
Подготовленные вопросы - один из лучших способов защиты от sql-инъекций. https://php.ru/manual/pdo.prepared-statements.html
@Ondottr, просто всё подготовленными запросами, и не надо никаких проверок делать. Тем более строки бывают в многобайтных кодировках.
@Ondottr твой код не имеет отношения к инъекциям. совсем. начни с определения https://www.w3schools.com/sql/sql_injection.asp
готовый класс для работы с БД: PHP: class MySQLi { private $connection; public function __construct($hostname, $username, $password, $database, $port = '3306') { $this->connection = new \mysqli($hostname, $username, $password, $database, $port); if ($this->connection->connect_error) { throw new \Exception('Error: ' . $this->connection->error . '<br />Error No: ' . $this->connection->errno); } $this->connection->set_charset("utf8"); $this->connection->query("SET SQL_MODE = ''"); } public function query($sql) { $query = $this->connection->query($sql); if (!$this->connection->errno) { if ($query instanceof \mysqli_result) { $data = array(); while ($row = $query->fetch_assoc()) { $data[] = $row; } $result = new \stdClass(); $result->num_rows = $query->num_rows; $result->row = isset($data[0]) ? $data[0] : array(); $result->rows = $data; $query->close(); return $result; } else { return true; } } else { throw new \Exception('Error: ' . $this->connection->error . '<br />Error No: ' . $this->connection->errno . '<br />' . $sql); } } public function escape($value) { return $this->connection->real_escape_string($value); } public function countAffected() { return $this->connection->affected_rows; } public function getLastId() { return $this->connection->insert_id; } public function connected() { return $this->connection->ping(); } public function __destruct() { $this->connection->close(); } } от инъекций: для IDшников - (int)$var в остальных случаях - метод escape