我在当前的分页中使用了get参数,并且它运行正常。但是,今天我遇到了SQL注入的想法,因此我尝试了mysqli_real_escape_string它。当我刷新页面时,在使用该get参数的查询上使用fetch_array似乎有问题。
我得到错误:
Fatal error: Call to a member function fetch_array() on boolean in C:\xampp\htdocs\index.php on line 106
第106行:
while($fetchlistquery = $Listquery->fetch_array()) {
整个代码段:
// Prepare pagination
$getPage = $LibraryUser->mysqli->real_escape_string($_GET["page"]);
if(isset($getPage)) { $page = $getPage; } else { $page = 1; };
$start_from = ($page-1) * 5;
// Get articles
$Listquery = $LibraryArticle->mysqli->query("SELECT * FROM site_articles ORDER BY id DESC LIMIT $start_from, 5");
while($fetchlistquery = $Listquery->fetch_array()) {
更新
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-5, 5' at line 1
仅当您不在实际页面中时才会出现此问题,例如?page = 1或?page = 2。
知道如何让它发挥作用吗?
答案 0 :(得分:0)
尝试在执行查询之前检查$page
值。并避免使用*,使用正确的列名。
if ($start_from >= 0)
$query = "SELECT * FROM site_articles ORDER BY id DESC LIMIT $start_from, 5";
else
$query = "SELECT * FROM site_articles ORDER BY id DESC LIMIT 0, 5";
// Get articles
$Listquery = $LibraryArticle->mysqli->query($query);
while($fetchlistquery = $Listquery->fetch_array()) {
答案 1 :(得分:0)
您在错误的地方使用isset()
功能。您应该先检查是否设置了$_GET['page']
如果没有$LibraryUser->mysqli->real_escape_string($_GET["page"])
,""
会返回$_GET['page']
,然后将其设置为$getPage
的值。因此,isset($getPage)
总是TRUE
,这是主要问题。先修复它,它会工作。
if(isset($_GET["page"])) {
$getPage = $LibraryUser->mysqli->real_escape_string($_GET["page"]);
} else {
$getPage = 1;
}
$page = $getPage;