2014-12-06 95 views
0

感謝任何幫助,我做錯了什麼?未聲明的變量:$偏移動態變量設置OFFSET(mySQL,php)

$offset = 1; 

$sql = 'SELECT * FROM links order by payout desc limit $offset, 1'; 
+0

這不能是產生這個錯誤消息的實際代碼,因爲單引號不會有任何變量替換,你只需在'$ sql'中得到一個字面的'... limit $ offset,1'可變... – 2014-12-06 12:34:32

+0

這不是我想要使用的代碼。但是這是給出錯誤的代碼。我不明白爲什麼它是一個未聲明的變量? – Daniel 2014-12-06 12:51:22

回答

-2

嘗試:

$sql = 'SELECT * FROM links order by payout desc limit ' . intval($offset) . ', 1'; 
+1

恭喜你剛剛創建了一個SQL注入漏洞。 – Stephen 2014-12-06 12:50:04

+0

如果偏移量定義爲1,那麼沒有漏洞存在?爲了避免它,如果它是一個get變量,使用intval($ offset)。 – 2014-12-06 12:58:46

+0

在這種單一的情況下,是轉換爲int會消除風險,但作爲一般規則,參數化查詢被認爲是更好的解決方案,因爲它們可以用任何類型的輸入變量保護查詢。 – Stephen 2014-12-07 05:38:03

1

不要使用變量替換字符串中建立這樣的SQL查詢。它會創建SQL注入漏洞。

使用PDO或mysqli的,並提供變量數據,例如:

$pdo = new PDO(...); 

$stmt = $pdo->prepare('SELECT * from links ORDER BY payout DESC LIMIT :offset, 1'); 

if ($stmt->execute(array(':offset' => $offset)) { 
    $row = $stmt->fetch(); 
} 
+0

你可以這樣做,如果你逃脫,在這種情況下,它是一個數字,所以只需使用intval。 – 2014-12-06 12:59:12

-1

有一點要提的,看來你寫在單引號變量內聯,變量只能在雙引號認可