Member 10626057 Ответов: 4

Как предотвратить SQL-инъекцию в PHP?


Привет..
У меня есть этот код
$sql = " вставить в tblLecturer (lec_id,lec_lastname,lec_firstname)
Значения ('$lid', '$lname', '$fname')";

Как я могу защитить этот код от SQL-инъекции?

Любая помощь плзз..
Спасибо..

[no name]

Использовать bind_param. Он связывает различные параметры с запросом и передает параметры в базу данных. Вы всегда должны использовать подготовленные операторы для выполнения sql-запросов. Лучше всего предотвращение PHP sql инъекции атаки.

4 Ответов

Рейтинг:
1

Peter Leow

Вы изменить инструкцию SQL, чтобы заранее подготовленное заявление, как это:

$sql = "INSERT INTO tblLecturer (lec_id,lec_lastname,lec_firstname) VALUES (?, ?, ?)";
 
if (!($stmt = $mysqli->prepare($sql))) {
    die("Prepare failed: ".$mysqli->errno);
}
 
if (!$stmt->bind_param('sss', $id, $lname, $fname)){
    die("Binding parameters failed: ".$stmt->errno);
}
 
if (!$stmt->execute()) {
    die("Insert registration table failed: ".$stmt->errno);
}


Member 10626057

я получаю ошибку
Фатальная ошибка: вызов функции-члена prepare() на не-объекте

Member 10626057

проблема в этой линии
если (!($параметр stmt = $mysqli как-&ГТ;подготовить($SQL и))) {

Peter Leow

Я думаю, что вы используете более старую версию php. http://www.php.net/manual/en/mysqli.installation.php

Member 10626057

я использую XAMPP 1.7.3

Peter Leow

Это слишком старовато. Следует обновить его до последней версии xampp, которая является v1. 8... Узнайте об этом на сайте Apache Fried http://www.apachefriends.org/index.html

Member 10626057

сезонник..
я его обновлю..

Рейтинг:
1

kishore@cse

Добавьте этот код ниже и попробуйте

$lid=htmlentities(addslashes($_POST['id of l'])); // just add htmlentities and addslashes

$lname=htmlentities(addslashes($_POST['id of l name']));

$fname=htmlentities(addslashes($_POST['id of f name']));

// Now your data is safe to insert through a query


$sql = "INSERT INTO tblLecturer (lec_id,lec_lastname,lec_firstname)
VALUES ('$lid','$lname','$fname')" ; 

mysql_query($sql) or die(mysql_error());


Рейтинг:
0

Member 10626057

спасибо ... я попробую :)

Рейтинг:
0

Thomas Daniels

Вы можете использовать ПДО[^], который включен по умолчанию начиная с PHP 5.1.0:

$pdo = new PDO("connection string here", "username", "password");
$sql = $pdo->prepare("INSERT INTO tblLecturer (lec_id,lec_lastname,lec_firstname)
VALUES ( :lid , :lname, :fname )");

$sql->execute(array('lid' => $lid));
$sql->execute(array('lname' => $lname));
$sql->execute(array('fname' => $fname));

foreach ($sql as $row) {
    // iterate over your rows
}

Потом заменить connection string here введите свою строку подключения и укажите свое имя пользователя и пароль. Если вы не знаете, какую строку подключения использовать, посмотрите здесь: http://www.connectionstrings.com/[^]

Более подробная информация здесь:
http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php[^]


Member 10626057

Получаю ошибку
Фатальная ошибка: вызов функции-члена prepare() на не-объекте
строка $sql = $pdo - & gt;prepare

Thomas Daniels

Я обновил свой ответ.

Member 10626057

любая помощь плзз.. :(