2013-06-04 48 views
-4

我寫了下面的一個極限= 10我的網址內限制我的表輸出但是它給我:MySQL的限制通過URL

(!) SCREAM: Error suppression ignored for 
(!) Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in  C:\wamp\www\sql_table.php on line 44 
Call Stack 
# Time Memory Function Location 
1 0.0005 250584 {main}() ..\sql_table.php:0 
2 0.0020 258904 mysql_fetch_array () ..\sql_table.php:44 

我的代碼如下:

if ($_GET['limit']) { 
$limitsql = ' limit 0, ' . $_GET['limit']; 
} else 
$limitsql = ''; 

// This chooses which results i want to select from 
$result = mysql_query("SELECT * FROM test1 WHERE 1" . '$limitsql'); 
+2

這是什麼? (Table Name)用你的實際表名改變它,並且請停止使用不推薦使用的函數作爲'mysql_ *',而是改爲學習pdo或mysqli。您的代碼也容易受到mysql注入 – Fabio

+0

打印您的最終SQL,即您在mysql_query中運行的SQL。 你的解決方案可以提供一些sql注入,所以也請注意 – Lefsler

+1

也在這裏不需要1(這不是錯誤)。 –

回答

0

更改此:

$result = mysql_query("SELECT * FROM test1 WHERE 1" . '$limitsql'); 

這樣:

$result = mysql_query("SELECT * FROM test1 WHERE 1" . $limitsql); 

此外,你真的不應該把輸入從$_GET直接進入SQL。

+1

哪裏不需要在這裏:) –

+0

這工作完全謝謝 – user2452069

0

您可能正在使用此:

while($row = mysql_fetch_array()) { 

} 

但是,你應該使用:

while($row = mysql_fetch_array($result)) { 

} 

你沒有提供你在這裏使用的代碼,所以我只是猜測。

0

試一下這個

if($_GET['limit']) 
{ 
$limitsql = $_GET['limit']; 
$result = mysql_query("SELECT * FROM table_name LIMIT 0, $limitsql"); 
} 
3

這裏的主要問題是,你不需要$limitsql加引號,所以將其更改爲

$result = mysql_query("SELECT * FROM (Table Name) WHERE 1" . $limitsql); 

然而,也有一些其他的事情,需要注意這個代碼。首先,如評論中所述,mysql_ *函數已被棄用,您應該理想地更改爲另一個庫,例如mysqli或PDO。

而且,這個代碼是SQL注入攻擊非常脆弱,輸入要投入一個SQL查詢之前進行消毒。

此外,你不檢查從您的通話將輸出到mysql_query。您看到的錯誤是因爲該功能在查詢失敗時返回false

+0

添加一個intval到您的答案,所以他不會從$ limitsql ='限制0,'sql注入憂慮。 INTVAL($ _ GET [ 'please_inject_here']);在2號線 – Sharky

0

使用此:

if($_GET['limit']){ 
    if (is_numeric($_GET['limit'])) { 
     $limitsql = ' limit 0, ' . $_GET['limit']; 
    } 
    }else{ 
$limitsql = ''; 
} 
$result = mysql_query("SELECT * FROM test1 WHERE 1" . $limitsql);