2016-05-14 101 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。