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


How to join variable with string in query?

我不知道为什么它不起作用。我认为它应该起作用。如果我用0更改查询中的$page。它奏效了。而是使用变量。它不起作用。

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;

如果您使用的是参数中的page,出于安全考虑,请考虑使用准备好的语句。

PHP准备的报表

$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分配params。

这样,php将自动检查变量是否包含正确的数据类型,并防止您的代码被sql注入所破坏。

如前所述,您将$page用作字符串。大多数时候,PHP是宽容的,但你现在正在进行查询,这些都不那么灵活。

由于您的报价,您的代码结果如下:

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

简单地说,您现在将它作为字符串传递。作为人类,您可以看到数字1,但代码看到的文本1,其价值与OFFSET 'a'大致相同,这对解释器来说没有意义。


此外,如果您想要第一个结果,则不需要偏移。此外,还有一个你所拥有的东西的简写版本:

LIMIT 10,25

这将给你10个项目,抵消25个项目。