2016-05-14 54 views
0

我不知道爲什麼它沒有工作。我認爲它應該工作。如果我改變$查詢與0它的工作。而是使用變量。它不起作用。如何在查詢中使用字符串連接變量?

PHP

$page = 0; 

$query = $sql = "SELECT `Id`, `Title`, `Genre`, `Images`, `Url`, `Width`, `Height` FROM `contents` LIMIT 10 OFFSET '".$page."'"; 
+2

這是一個數字,而不是一個字符串,所以在你的SQL查詢 –

+0

@MarkBaker中沒有在$頁的引號,所以它應該是'。$ page'。 ? –

+0

號,雙引號是你的字符串封裝,單是爲SQL封裝,擺脫單一。你可以把變量放在雙引號內。 'LIMIT 10 OFFSET $ page'' – chris85

回答

1

$page是一個數字,所以你應該做的:

$sql = "SELECT `Id`, `Title`, `Genre`, `Images`, `Url`, `Width`, `Height` FROM `contents` LIMIT 10 OFFSET ". $page; 
0

至於其他提到的,您使用的$頁面作爲一個字符串。大多數時候PHP的是寬容,但youyr現在正在查詢,米那些不那麼靈活。

因爲你的報價,你的代碼的結果是:

OFFSET '0' // See the quotes? 
OFFSET 0 // no quotes is what you're looking for 

非常簡單地說,你現在把它作爲字符串。你作爲人看到 1,但代碼看到文本 1,它具有大致相同的身價OFFSET 'a',它不解釋意義。


另外,如果您想要第一個結果,則不需要偏移量。此外,有你有啥子速記版本:

LIMIT 10,25 

這會給你10個項目,有25。

1

偏移,如果你使用的是從頁的參數,可以考慮使用準備語句安全考慮。

PHP Prepared Statements

$page = 0; 
$conn = new mysqli($servername, $username, $password, $dbname); 

// prepare and bind 
$stmt = $conn->prepare("SELECT `Id`, `Title`, `Genre`, `Images`, `Url`, `Width`, `Height` FROM `contents` LIMIT 10 OFFSET ?"); 
$stmt->bind_param("i", $page); 

只寫你的SQL語句在準備好的聲明,並用$ stmt-分配後您的參數> bind_param。

有了這個,PHP會自動檢查變量包含正確的數據類型,並可以防止您的代碼被SQL注入vunerable。

相關問題