无法逃脱获取并在查询中使用它

时间:2015-12-23 14:38:54

标签: php mysqli pagination

我在当前的分页中使用了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。

知道如何让它发挥作用吗?

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;