我不知道爲什麼它沒有工作。我認爲它應該工作。如果我改變$查詢與0它的工作。而是使用變量。它不起作用。如何在查詢中使用字符串連接變量?
PHP
$page = 0;
$query = $sql = "SELECT `Id`, `Title`, `Genre`, `Images`, `Url`, `Width`, `Height` FROM `contents` LIMIT 10 OFFSET '".$page."'";
我不知道爲什麼它沒有工作。我認爲它應該工作。如果我改變$查詢與0它的工作。而是使用變量。它不起作用。如何在查詢中使用字符串連接變量?
PHP
$page = 0;
$query = $sql = "SELECT `Id`, `Title`, `Genre`, `Images`, `Url`, `Width`, `Height` FROM `contents` LIMIT 10 OFFSET '".$page."'";
你$page
是一個數字,所以你應該做的:
$sql = "SELECT `Id`, `Title`, `Genre`, `Images`, `Url`, `Width`, `Height` FROM `contents` LIMIT 10 OFFSET ". $page;
至於其他提到的,您使用的$頁面作爲一個字符串。大多數時候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。
偏移,如果你使用的是從頁的參數,可以考慮使用準備語句安全考慮。
$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。
這是一個數字,而不是一個字符串,所以在你的SQL查詢 –
@MarkBaker中沒有在$頁的引號,所以它應該是'。$ page'。 ? –
號,雙引號是你的字符串封裝,單是爲SQL封裝,擺脫單一。你可以把變量放在雙引號內。 'LIMIT 10 OFFSET $ page'' – chris85