如何从PHP MySQL SQL注入易受攻击的查询转到MySQLi不易受攻击的查询

我正在学习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,则可以完成其他查询.

顺便说一句,如果您(专家)认为还有比MySQLi更好的保护我免受sql注入攻击的方法,请告诉我.

解决方法:

$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();
上一篇:我在对象上调用函数时为什么在非对象上出现此函数调用错误?


下一篇:php-使用MySqli将NULL值插入MySql记录