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