Я использую PDO
для подключения к базе данных и хранения входных данных в SQL
данных SQL
, мне нужно добавить определенный фильтр для ввода пользователем, поэтому я добавил этот метод для фильтрации ввода
$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_AMP);
Я обнаружил, что мой метод уязвим для SQL-инъекции, поэтому я использовал mysql_real_escape_string
$name1 = mysql_real_escape_string(filter_input(INPUT_POST, 'First_Name'));
И я получаю ОШИБКУ
Устаревшее: mysql_real_escape_string (): расширение mysql устарело и будет удалено в будущем: вместо этого используйте mysqli или PDO в C: \ Users \ logon \ Documents \ NetBeansProjects \ SQL injection \ for.php в строке 12
Итак, как избежать строки mysql в PDO?
<?php $servername = "localhost"; $username = "sanoj"; $password = "123456"; $dbname = "localtest"; try { $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); // set the PDO error mode to exception $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // prepare sql and bind parameters $stmt = $conn->prepare("INSERT INTO filter (firstname, lastname, email) VALUES (:firstname, :lastname, :email)"); $stmt->bindParam(':firstname', $firstname); $stmt->bindParam(':lastname', $lastname); $stmt->bindParam(':email', $email); // insert a row $firstname = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_AMP); $lastname = filter_input(INPUT_POST, 'lname', FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_AMP); $email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_AMP); $stmt->execute(); echo "New records created successfully"; } catch (PDOException $e) { echo "Error: " . $e->getMessage(); } $conn = null; ?>