SQL инъекция — параметризованные запросы вставки PHP

Я пытаюсь вставить введенные данные из формы в базу данных MySQL с помощью php для школьного проекта.

Если нашли пару примеров, но не можете заставить их работать.
Я сделал это без параметризованных запросов, и он работал нормально.
Код выглядел так

$user_firstName = $_POST['firstName'];
$user_lastName = $_POST['lastName'];
$user_receiveTexts = "true";
$user_mobileNumber = $_POST['mobileNumber'];
$user_receiveNewsletter = $_POST['receiveNewsletter'];
$user_email = $_POST['email'];

if(isset($_POST['submit'])) {
$sql = "INSERT INTO subscribers (firstName, lastName, receiveTexts, mobileNumber, receiveNewsletter, email)
VALUES ('$user_firstName', '$user_lastName', '$user_receiveTexts', '$user_mobileNumber', '$user_receiveNewsletter', '$user_email' )";

Затем я попытался изменить его, чтобы использовать параметризованные запросы / подготовленные операторы, но не могу заставить его работать.

$sql = "INSERT INTO subscribers (firstName, lastName, receiveTexts, mobileNumber, receiveNewsletter, email) VALUES (?, ?, ?, ?, ?, ?)";
$stmt = $mysqli->prepare($sql);

$stmt->bind_param($val1, $val2, $val3, $val4, $val5, $val6);

$val1 = $user_firstName;
$val2 = $user_lastName;
$val3 = "true";
$val4 = $user_mobileNumber;
$val5 = $user_receiveNewsletter;
$val6 = $user_email;

$stmt->execute();

Я просто пытаюсь предотвратить SQL-инъекцию 🙂
Любая помощь приветствуется.
Спасибо

2

Решение

Вы пропускаете первый аргумент bind_paramстрока, которая говорит, какие из параметров являются строками или целыми числами.

$stmt->bind_param('ssssss', $val1, $val2, $val3, $val4, $val5, $val6);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]