我的网站上有查询,最近因为它被黑了。
我花了2个小时看看如何转换这个查询,因此它是安全的,没有任何地方。
如果有人不介意的话,请你帮我换一下这个,这样我就可以看看其余的怎么做了?
$camera_id = $_GET['camera_id'];
$cameras = mysqli_query($conn, "SELECT * FROM cameras WHERE id = $camera_id");
$camera = mysqli_fetch_array($cameras);
答案 0 :(得分:1)
尝试这样的事情。
$camera_id = $_GET['camera_id'];
$cameras = mysqli_prepare($conn, "SELECT * FROM cameras WHERE id = ?");
mysqli_stmt_bind_param($cameras, $camera_id);
$cameras->execute();
在进行切换时,请立即切换到PDO。它比mysqli好得多。
$db = new PDO('mysql:host=localhost;dbname=mydb', 'username', 'password');
$stmt = $db->prepare("SELECT * FROM cameras WHERE id = :camera_id");
$stmt->execute(array(":camera_id"=>$camera_id));
$result = $stmt->fetchAll();
或代替fetchAll()
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row['field1'].' '.$row['field2']; //etc...
}
正如您所看到的,这更具可读性。如果你以后决定改用postgresql,那么改变就很容易了。
答案 1 :(得分:1)
这是使用PDO并假设摄像机ID是一个数字(如果它可以包含非数字值,则将PARAM_INT交换为PARAM_STR。基本前提是您将查询与变量分开并绑定值变量所需的项目。另请注意,您需要更改新PDO声明中的变量以适合您自己的数据库。另请注意,fetchAll()提供了返回结果的关联数组 - 还有许多其他获取()方法可能给出不同的结果 - 寻找官方文档。
$camera_id = $_GET['camera_id'];
$conn = new PDO('mysql:host=localhost;dbname=db', 'username', 'password');
$sql = "SELECT * from cameras where id = :cameraId";
$q = $conn->prepare($sql);
$q -> bindValue(":cameraId" , $camera_id, PDO::PARAM_INT);
$q->execute();
$cameraRows = $q->fetchAll();
foreach($cameraRows as $cameraRow){
$CID= $cameraRow["camera_id"];
//.... rest of the code
}