我正在学习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();