gpt4 book ai didi

Php pdo 和 offset=0

转载 作者:行者123 更新时间:2023-11-29 06:09:16 25 4
gpt4 key购买 nike

我正在尝试使用 PHP 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(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in

最佳答案

您的 SQL 查询无效。

你有:

$sql = 'SELECT * FROM journal where LIMIT :limit OFFSET :offset';

正如@Jessie Jackson 指出的那样,为什么“where”部分是空的?

以下是有效的"

$sql = 'SELECT * FROM journal LIMIT :limit OFFSET :offset';

我不明白你为什么会得到你得到的错误:

PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in

无效 where 语句的错误应该是这样的:

PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT ? OFFSET ?' at line 1 in /path/to/stackoverflow/tmp/pdo.php on line 18

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

<?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,请阅读 Parametrized PDO query and LIMIT clause - not working .

关于Php pdo 和 offset=0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39357974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com