mysqli — правильный способ создать PHP подготовленный оператор?

Я новичок в PHP

В настоящее время работаю над созданием моего первого веб-приложения!

Я создал этот PHP-скрипт для регистрации / регистрации в моем веб-приложении,
и я хочу, чтобы предотвратить внедрение SQL
Так что мне нужно некоторое руководство здесь, я узнал все сам с нуля!

Поэтому я решил использовать из того, что я прочитал и узнал.

Вот мой код:

$server = "localhost";
$user = "root";
$pass = "";
$selected_db = "User";
$selected_table = "usersbio";

// Create connection
$linking = new mysqli($server, $user, $pass, $selected_db);

// Input variable
$firstname = mysqli_real_escape_string($linking, $_POST['firstname']);
$lastname = mysqli_real_escape_string($linking, $_POST['lastname']);
$userpass = mysqli_real_escape_string($linking, $_POST['userpass']);
$useremail = mysqli_real_escape_string($linking, $_POST['useremail']);
$udob_d = mysqli_real_escape_string($linking, $_POST['userdobd']);
$udob_m = mysqli_real_escape_string($linking, $_POST['userdobm']);
$udob_y = mysqli_real_escape_string($linking, $_POST['userdoby']);

$hashingpass = password_hash($userpass, PASSWORD_DEFAULT);

// Saving data to db - table
$stmt = $linking->prepare("INSERT INTO $selected_table (userfirstname,
userlastname, userpasskey, useremail, userdobd, userdobm, userdoby)
VALUES ('?', '?', '?', '?', '?', '?', '?')");

$stmt->bind_param('s', 's', 's', 's', 'i', 's', 'i', $firstname,
$lastname, $hashingpass, $useremail, $udob_d, $udob_m, $udob_y);
$stmt->execute();

$linking->close();

1

Решение

Вы prepare() Заявление выглядит так, как будто оно должно работать …

Также, как сказал Алекс Хованский:

Не полагайтесь на функции real_escape_string () для предотвращения внедрения SQL, их одного недостаточно. Вы должны использовать подготовленные операторы со связанными параметрами через mysqli или PDO. Этот пост имеет несколько хороших примеров.

Ссылаться на: Как я могу предотвратить внедрение SQL в PHP?

Вы также должны удалить одинарные кавычки вокруг вопросительных знаков …

ПОПРОБУЙ ЭТО:

$server = "localhost";
$user = "root";
$pass = "";
$selected_db = "User";
$selected_table = "usersbio";

// Create connection
$linking = new mysqli($server, $user, $pass, $selected_db);

// Input variable
$firstname = mysqli_real_escape_string($linking, $_POST['firstname']);
$lastname = mysqli_real_escape_string($linking, $_POST['lastname']);
$userpass = mysqli_real_escape_string($linking, $_POST['userpass']);
$useremail = mysqli_real_escape_string($linking, $_POST['useremail']);
$udob_d = mysqli_real_escape_string($linking, $_POST['userdobd']);
$udob_m = mysqli_real_escape_string($linking, $_POST['userdobm']);
$udob_y = mysqli_real_escape_string($linking, $_POST['userdoby']);

$hashingpass = password_hash($userpass, PASSWORD_DEFAULT);

// Saving data to db - table
$stmt = $linking->prepare("INSERT INTO $selected_table (userfirstname,
userlastname, userpasskey, useremail, userdobd, userdobm, userdoby)
VALUES (?, ?, ?, ?, ?, ?, ?)");

$stmt->bind_param('ssssisi', $firstname,
$lastname, $hashingpass, $useremail, $udob_d, $udob_m, $udob_y);
$stmt->execute();

$linking->close();

ЭТО ОБНОВЛЕННЫЙ ЗАПРОС:

INSERT INTO $selected_table (userfirstname, userlastname, userpasskey, useremail, userdobd, userdobm, userdoby)
VALUES (?, ?, ?, ?, ?, ?, ?)

Если вам нужна дополнительная помощь с подготовленными заявлениями, взгляните на эту ссылку:

http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

0

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

Если вы только начали, я бы предложил использовать PDO вместо старого интерфейса mysqli. Это гораздо менее многословно и проще в использовании. Вот как будет выглядеть ваш код:

<?php
$server = "localhost";
$user = "root";
$pass = "";
$selected_db = "User";

// Create connection
$linking = new PDO("mysql:host=$server;dbname=$selected_db", $user, $pass);

// Saving data to db - table
$query = "INSERT INTO usersbio
(userfirstname, userlastname, userpasskey, useremail, userdobd, userdobm, userdoby)
VALUES (?, ?, ?, ?, ?, ?, ?)";

$params = [
$_POST["firstname"],
$_POST["lastname"],
password_hash($_POST["userpass"], PASSWORD_DEFAULT),
$_POST["useremail"],
$_POST["userdobd"],
$_POST["userdobm"],
$_POST["userdoby"],
];
$stmt = $linking->prepare($query);
$stmt->execute($params);

$linking->close();
2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector