我不知道为什么它没有工作。我认为它应该工作。如果我改变$查询与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