如何在查询中将变量与字符串连接?

时间:2016-05-14 22:34:51

标签: php

我不知道为什么它不起作用。我认为它应该工作。如果我用0更改查询中的$页面就可以了。而是使用变量。它不起作用。

PHP

$page = 0;

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

3 个答案:

答案 0 :(得分:1)

您的$page是一个数字,所以您应该这样做:

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

答案 1 :(得分:1)

如果您使用参数中的页面,请考虑使用预准备语句进行安全性考虑。

here

$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);

只需在准备好的Statement中编写sql语句,然后使用$ stmt-> bind_param分配你的参数。

有了这个,php会自动检查变量是否保持正确的数据类型,并且会阻止你的代码被sql注入所证实。

答案 2 :(得分:0)

正如其他人提到的,您将$ page用作字符串。大多数情况下,PHP是宽容的,但你现在正在进行查询,而这些不是那么灵活。

由于您的引号,您的代码会产生以下结果:

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

非常简单地说,你现在把它作为字符串传递。你作为人类看到数字 1,但代码看到 text 1,其价值与OFFSET 'a'大致相同,但它没有意义翻译。

此外,如果您想要第一个结果,则不需要偏移量。此外,还有一个速记版本:

LIMIT 10,25

这将为您提供10项,偏移量为25。