mysql_real_escape_string не работает

У меня есть следующая страница действий после того, как пользователь отправляет свои данные формы. Я хочу предотвратить атаки с использованием SQL-инъекций, поэтому я попытался использовать функцию mysql_real_escape_string. Однако после того, как я вставлю что-то, например, данные Название поля: Автомобиль моего брата. Данные в базе данных такие же, как «Автомобиль моего брата». Это не изменилось вообще или mysql_real_escape_string был проигнорирован?

Когда я отображаю имя переменной, используя echo с mysql_real_escape_string, он отображает «Автомобиль моего брата». Однако он не работает, когда вы вставляете его в базу данных.

<?php
$mysqli = mysqli_connect("localhost", "hecton", "ccna", "joomladb");

if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
} else {$id = mysql_real_escape_string($_POST['id']);
$name = mysql_real_escape_string($_POST['name']);
$gender = mysql_real_escape_string($_POST['gender']);
$dateofbirth = mysql_real_escape_string($_POST['dateofbirth']);
$placeofbirth = mysql_real_escape_string($_POST['placeofbirth']);
$address = mysql_real_escape_string($_POST['address']);
$schoolname = mysql_real_escape_string($_POST['schoolname']);
$qualification = mysql_real_escape_string($_POST['qualification']);
$skills1 = mysql_real_escape_string($_POST['skills1']);
$skills2 = mysql_real_escape_string($_POST['skills2']);
$awards = mysql_real_escape_string($_POST['awards']);
$Volunteer = mysql_real_escape_string($_POST['Volunteer']);

$query = " INSERT INTO j71mi_resumeinfo ( id, name, gender, dateofbirth, placeofbirth, address, schoolname, qualification, skills1, skills2, awards, Volunteer )  VALUES ( '$id', '$name', '$gender', '$dateofbirth', '$placeofbirth', '$address', '$schoolname', '$qualification', '$skills1', '$skills2', '$awards', '$Volunteer' ) ";
$result = mysqli_query($mysqli, $query);if ($result === TRUE) {
echo "A record has been successfully inserted into the database!.";
echo "<b><h1><center>My Resume</h1></b></center>";

echo "<div style='font-size: large; font-family: sans-serif'>
<p style='color: white; background-color: black'>Personal Details</p></div>";
echo "<br>";echo "<b>Name:</b>".($_POST['name']);
echo "<br>";
echo "<b>Gender:</b>".$_POST['gender'];
echo "<br>";
echo "<b>Date of Birth:</b>".$_POST['dateofbirth'];
echo "<br>";
echo "<b>Place of Birth:</b>".$_POST['placeofbirth'];
echo "<br>";
echo "<b>Home Address:</b>".$_POST['address'];
echo "<div style='font-size: large; font-family: sans-serif'>
<p style='color: white; background-color: black'>Educational Details</p></div>";
echo "<br>";
echo "<b>School Name:</b>".$_POST['schoolname'];
echo "<br>";
echo "<b>Qualification(s):</b>".$_POST['qualification'];
echo "<br>";
echo "<b>Skill 1:</b>".$_POST['skills1'];
echo "<br>";
if(!empty($_POST['skills2']) and isset($_POST['skills2'])){
echo "<b>Skill 2:</b>".$_POST['skills2'];
echo "<br>";
}
if(!empty($_POST['awards']) || !empty($_POST['Volunteer'])){
echo "<div style='font-size: large; font-family: sans-serif'>
<p style='color: white; background-color: black'>Other Details</p></div>";
echo "<br>";
}
if(!empty($_POST['awards']) and isset($_POST['awards'])){
echo "<b>Award(s):</b>".$_POST['awards'];

echo "<br>";
}
if(!empty($_POST['Volunteer']) and isset($_POST['Volunteer'])){
echo "<b>Volunteer Activity:</b>".$_POST['Volunteer'];
echo "<br>";
}

echo "<br>";
echo "<b><h5><center>End of Resume</h5></b></center>";} else {
printf("Could not insert record: %s\n", mysqli_error($mysqli));
}

mysqli_close($mysqli);
}
?>

-1

Решение

Данные был на самом деле убежали.

Когда вы смотрите на данные в базе данных, факт их существования означает, что они были экранированы — они только экранированы, поэтому они не принимаются в качестве символа в запросе. Как только он находится внутри базы данных, он рассматривается как часть данных.

Например, INSERT INTO table VALUES ('My brother\'s car'); вставит My brother's car в базу данных. поскольку ' является зарезервированным символом в MySQL, он рассматривается не как часть запроса, а как часть набора данных, «правильная» одинарная кавычка, а не как символ «начало значения раздела».

Замечания: не использовать mysql_real_escape_string когда используешь mysqli_ функции. Имеет собственный эквивалент.

2

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

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

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