PDO LIMIT 和 OFFSET [重复]
Posted
技术标签:
【中文标题】PDO LIMIT 和 OFFSET [重复]【英文标题】:PDO LIMIT and OFFSET [duplicate] 【发布时间】:2011-07-27 09:51:12 【问题描述】:可能重复:php PDO bindValue in LIMIT
在prepare语句中使用LIMIT和/或OFFSET时无法显示数据,但是如果不使用LIMIT和OFFSET可以显示“雷雷”,是不是代码看起来不对?
$statement = $conn->prepare("SELECT id,username FROM public2 WHERE username = :name LIMIT :sta OFFSET :ppage");
$name = "Lei Lei";
$statement->execute(array(':name' => $name,':sta' => $start,':ppage' => $per_page));
这已从有效的原始代码更改:
$query_pag_data = "SELECT id,username from public2 LIMIT $start, $per_page";
$result_pag_data = mysql_query($query_pag_data) or die('MySql Error' . mysql_error());
【问题讨论】:
你有什么理由运行$statement->execute()
两次?你在执行后使用$statement->fetch()
或$statement->fetchAll()
来检索结果吗?
更新我的帖子,我正在使用 $statement->fetch()
【参考方案1】:
我找到了答案!
$statement->bindValue(':sta1', (int) $start, PDO::PARAM_INT);
有效
【讨论】:
谢谢。我想知道为什么我的 LIMIT :count 不起作用。看起来它被转换为字符串。【参考方案2】:$dbh->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );
会让你绑定变量而不用担心它们类型
【讨论】:
为什么在调用后添加 PDO::PARAM_INT 时还要这样做? 这也允许你使用普通的数组绑定而不是 $statement->bindValue。 +1【参考方案3】:编辑:固定
$statement = $conn->prepare("SELECT id,username FROM public2 WHERE username = :name LIMIT :limit OFFSET :offset");
$name = "Lei Lei";
$statement->bindValue(':name', $name);
$statement->bindValue(':limit', (int) $start, PDO::PARAM_INT);
$statement->bindValue(':offset', (int) $per_page, PDO::PARAM_INT);
$statement->execute();
【讨论】:
@proyb2 尝试不使用原始查询中的 OFFSET:SELECT id, username FROM public2 WHERE username = :name LIMIT $start , $per_page
我明白了,那么如何将 LIMIT 添加到 prepare 语句中?
我找到了答案! $statement->bindValue(':sta1', (int) $start, PDO::PARAM_INT);确实有效
你错了。这样做违背了准备好的陈述的想法
讨厌死一个线程...但是编辑后的版本将参数绑定到错误的名称...给定 SQL 语句中的参数 "... LIMIT :limit OFFSET :offset" 你应该将 $start 绑定到 offset 并将 $per_page 绑定到 limit以上是关于PDO LIMIT 和 OFFSET [重复]的主要内容,如果未能解决你的问题,请参考以下文章
在查询中使用 PDO 准备好的语句和 LIMIT 时出错 [重复]
Oracle 中分页的 LIMIT 和 OFFSET 的替代方法 [重复]