首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pdo和offset=0

pdo和offset=0
EN

Stack Overflow用户
提问于 2016-09-06 21:16:29
回答 1查看 1.3K关注 0票数 1

我正在尝试用PDO构建一个应用程序。

代码语言:javascript
复制
$sql = 'SELECT * FROM journal where LIMIT :limit OFFSET :offset';  
$res = db_con->prepare($sql);  
$res->bindParam(':limit', $limit, PDO::PARAM_INT);
$res->bindParam(':offset', $offset, PDO::PARAM_INT);
$res->execute();

这是工作。但如果是$offset=0,我就错了

PDOStatement::execute():SQLSTATEHY093:无效的参数号:绑定变量的数量不匹配

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-06 21:59:49

SQL查询无效。

你有:

代码语言:javascript
复制
$sql = 'SELECT * FROM journal where LIMIT :limit OFFSET :offset';

正如@Jessie Jackson指出的,为什么“哪里”部分是空的?

以下是有效的“

代码语言:javascript
复制
$sql = 'SELECT * FROM journal LIMIT :limit OFFSET :offset';

我不知道你为什么在哪里得到你所犯的错误:

PDOStatement::execute():SQLSTATEHY093:无效的参数号:绑定变量的数量不匹配

无效where语句的错误应该如下所示:

PDOException: SQLSTATE42000:语法错误或访问冲突: 1064您的SQL语法出现了错误;检查与MySQL服务器版本对应的手册,以获得接近“限制偏移量?”的正确语法。在/path/to/stackoverflow/tmp/pdo.php第18行的第1行

而且可以肯定的是,以下测试工作正常:

代码语言:javascript
复制
<?php

$pdo = new PDO(
    'mysql:dbname=test',
    'yser',
    'pass'
);

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

$limit = 0;
$offset = 0;

$sql = 'SELECT * FROM journal LIMIT :limit OFFSET :offset';
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':limit', $limit, PDO::PARAM_INT);
$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
$res = $stmt->execute();

var_dump($res);
var_dump($stmt->fetchAll());

所以,为什么要得到这个错误与$offset=0无关。

更新

这可能是因为如果您将PDO::ATTR_EMULATE_PREPARES设置为true,请阅读 clause - not working

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39357974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档