首先,你可以捕獲一個SQL注入攻擊與沒有轉義的輸入。然後,我認爲您的搜索字詞可能會中斷SQL查詢。嘗試使用mysql_real_escape_string:
$all = mysql_real_escape_string(implode(" +",$words));
的頁面可能只是數字,然後它的安全做到:
$page = (int) $_GET['page'];
沒有逃脫字符串。
然後也是最重要的:查詢計數和查詢數據必須具有相同的聯接和WHERE參數。如果您在一個表格中搜索匹配,則可以獲得100行。然後你試圖加入另一個表格,在那裏只找到10行。數據只有10行,頁面只有100行。
$query = "SELECT COUNT(some_id_column) as num FROM products JOIN shops
ON products.shopid = shops.id WHERE MATCH (name) AGAINST ('+" . $all . "' IN BOOLEAN MODE)";
而你並不需要包括AND products.shopid = shops.id
你的WHERE子句,如果你已經擁有了它在HAVING子句。
然後,你的第一個查詢的結果是不指望PAGES,它中的行數。如果您想在頁面上顯示10行,那麼您的總頁數將爲ceiling($total_pages/10)
。
'mysql_escape_string'已被棄用。使用'mysql_real_escape_string' – cwallenpoole
嘗試它沒有運氣 – EnexoOnoma
它不會解決你的問題,它只是更安全。 – cwallenpoole