1

如您所见,我正在尝试在使用准备好的语句时从表中获取行。

$stmt = $conn->prepare("SELECT * FROM table ORDER BY date DESC LIMIT ?, 10");
$stmt->bindParam(1, $row_start, PDO::PARAM_INT);
$stmt->execute();

while($row = $stmt->fetch()) {
echo $row['title'];
echo $row['name'];
}

它不回声任何东西。

编辑: var_dump 显示此日志:

“您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 ''0', 10' 附近使用正确的语法”}

编辑2:这是我声明我的方式$row_start

$row_start = "0";
if (isset($_GET['page']) && is_numeric($_GET['page']) && $_GET['page'] != "0" )
{
$row_start = $_GET['page'];
if ($row_start == "1") {
$row_start = "0";
}else{
$row_start = ($row_start-1) * 10;
}                       
}
4

2 回答 2

3

默认情况下,值类型将为字符串。

您可以将其设置为整数,如下所示:

$stmt->bindParam(1, $row_start, PDO::PARAM_INT);

更新:

即使您将其强制为 INT,它仍将其作为字符串传递。

看看你的错误信息:

near ''0', 10' at line 1" }

特别是0之后的结尾',表示它是一个字符串。

0'

更新

即使您传递了预期的 PDO 类型,也需要手动对变量进行类型转换:

$limit = (int) 1;
$limit2 = (int) 1;


$stmt = $pdo->prepare("SELECT * FROM Table LIMIT :limit, :offset");
$stmt->bindParam(":limit", $limit, PDO::PARAM_INT);
$stmt->bindParam(":offset", $limit2, PDO::PARAM_INT);
$stmt->execute();
于 2012-08-08T16:47:46.093 回答
0
$conn->prepare("SELECT * FROM table ORDER BY date DESC LIMIT ?");
$stmt->execute(array(10));
于 2012-08-08T16:45:41.843 回答