gpt4 book ai didi

php - PDO Int 占位符在它们周围获取引号

转载 作者:可可西里 更新时间:2023-11-01 08:06:20 28 4
gpt4 key购买 nike

所以下面的代码一直困扰着我:

    $stm = $pdo->prepare("SELECT * FROM urls WHERE account=? AND NOT deleted LIMIT ?, 4");
$stm->execute($user, ($request-1)*4);

每当我执行这个查询时,它都会返回这个错误:

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 ''0', 4' at line 1'

查找后似乎使用 ?除非您使用 bindParam 指定,否则占位符会自动在其周围加上引号。有什么方法可以在不使用 bingparam 函数的情况下解决这个问题吗?

最佳答案

这是一个已知问题,也是为什么 limit 不应该真正与绑定(bind)参数一起使用的原因。但是,您可以通过单独绑定(bind)参数并将其命名为 int 来解决这个问题。

$stm = $pdo->prepare("SELECT * FROM urls WHERE account=? AND NOT deleted LIMIT ?, 4");
$stm->bindValue(1, $user);
$stm->bindValue(2, ($request-1)*4), PDO::PARAM_INT);
$stm->execute();

如果您阅读 PDOStatement::execute()这是因为对执行的绑定(bind)导致所有参数都被绑定(bind)为字符串。

作为Your Common Sense指出,您可以通过以下方式禁用仿真模式并让 MySQL 自己整理占位符,尽管这可能不适用于所有 DB 驱动程序(尽管适用于 MySQL):

$pdo->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );

或者您可以执行 intval 或类型转换为 int,然后将其直接放入语句中(如果您愿意的话)。

关于php - PDO Int 占位符在它们周围获取引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15984025/

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