Как перейти от php MySQL sql инъекции уязвимых запросов к MySQLi не уязвимых запросов

im, изучая MySQLi, чтобы сделать мой сайт не уязвимым для SQL-инъекций (это сейчас), но я запутался, когда пытался «перевести» мои старые запросы в операторы MySQLi, поэтому надеюсь, что вы можете помочь мне с некоторыми примерами, поэтому я может получить его. Большое спасибо!.

Обновление счетчика моего сайта

$sql = "UPDATE post SET counter = counter+1 WHERE id=".$tget; 

Сортировка моих комментариев

 $info=mysql_query("SELECT * FROM `comments` WHERE idpost=" . $tget . " AND active=1 ORDER BY datetime DESC"); 

Сохранение комментария

 $sql = "INSERT INTO `comments` (`id`, `idpost`, `comment`, `datetime`, `author`, `active`) VALUES (NULL, '" . addslashes($_POST['idcomment']) . "', '" . addslashes($_POST['comment']) . "', NOW(), '" . addslashes($_POST['name']) . "', '1');"; 

Если вы можете объяснить мне, как перейти отсюда к MySQLi, я могу закончить с другими запросами.

И, кстати, если вы ( эксперт ) считаете, что есть другой способ защитить меня от SQL-инъекций лучше, чем MySQLi, пожалуйста, расскажите мне об этом.

 $conn = new mysqli(…); $sql = "UPDATE post SET counter = counter+ 1 WHERE id= ?"; $stmt = $conn->prepare($sql); $stmt->bind_param("i", $tget); $stmt->execute(); 

В первом аргументе bind_param используйте строку из i , s , d и b чтобы задать типы параметров:

 $stmt = $conn->prepare("INSERT INTO mytable (int_column, string_column, double_column, blob_column, another_int_column VALUES (?, ?, ?, ?, ?)"); $stmt->bind_param("isdbi", $int_val, $string_val, $double_val, $blob_val, $another_int_val); $stmt->execute(); 

Мой опыт показывает, что вы используете хранимую процедуру с опцией bind_param. вам нужно прочитать это сообщение для более подробной информации.

Используйте один bind_param () с переменным числом входных vars