我有一个简单的7行PHP
脚本,如下所示:
代码
require( "connect.php" );
$ctg = ($_GET['ctg'])? $_GET['ctg']:'movie';
$offset = ($_GET['off'])? $_GET['off']:30;
$query = "SELECT `msg`, `id`, `nick`, `date` FROM `entries` WHERE `ctg` = ? ORDER BY `id` DESC LIMIT 15 OFFSET ?";
$statemnt = $conn->prepare( $query );
$statemnt->bindParam( 1, $ctg, PDO::PARAM_STR );
$statemnt->bindParam( 2, $offset, PDO::PARAM_INT );
$statemnt->execute();
$results = $statemnt->fetchAll( PDO::FETCH_ASSOC );
echo "$ctg\n$offset\n" . count($results) . "\n";
问题
我面临的问题是这样的:当我在控制台中执行文件时(使用
php fetch.php
),所有的echo
都工作得很好。当我在浏览器中打开没有$_GET
变量的页面时,会看到相同的输出。当我为浏览器中的输出提供索引变量(如
ctg
)时,它的输出是正确的;如下所示:docu
30
15
但是当我传递
http://localhost/fetch.php?ctg=docu
索引变量时(可以是off
或fetch.php?off=15
或fetch.php?ctg=docu&off=15
);输出总是这样:docu
15
0
问题
输出(和
fetch.php?off=15&ctg=docu
)都显示了传递给这两个变量的正确值,那么为什么pdo语句没有收到任何结果?为什么var_dump
保持0?如有任何帮助,我们将不胜感激。
聚苯乙烯
我还包括以下声明:
$statemnt->debugDumpParams();
将此转储到浏览器(和控制台)中:
SQL: [102] SELECT `msg`, `id`, `nick`, `date` FROM `entries` WHERE `ctg` = ? ORDER BY `id` DESC LIMIT 15 OFFSET ?
Params: 2
Key: Position #0:
paramno=0
name=[0] ""
is_param=1
param_type=2
Key: Position #1:
paramno=1
name=[0] ""
is_param=1
param_type=1
最佳答案
可能$off
GET
变量被视为字符串,而int
是预期的
更改:
$offset = ($_GET['off'])? $_GET['off']:30;
到
$offset = ($_GET['off'])?(intval($_GET['off']):30;
当然,对于所有的
GET
变量都应该有适当的验证