我正在尝试用PDO构建一个应用程序。
$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:无效的参数号:绑定变量的数量不匹配
发布于 2016-09-06 21:59:49
SQL查询无效。
你有:
$sql = 'SELECT * FROM journal where LIMIT :limit OFFSET :offset';正如@Jessie Jackson指出的,为什么“哪里”部分是空的?
以下是有效的“
$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行
而且可以肯定的是,以下测试工作正常:
<?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。
https://stackoverflow.com/questions/39357974
复制相似问题