这个是pdo的bug吗?

发布于 2022-09-01 21:48:06 字数 476 浏览 9 评论 0

$user='test';
$pass='123456';
$dbh = new PDO('mysql:host=127.0.0.1;dbname=test', $user, $pass);
$sth = $dbh->prepare("SELECT * FROM user WHERE id IN (?) ORDER BY id ASC");
$sth->execute(['456089015, 456089016, 456089017, 456089018, 456089019, 456089020, 456089021, 456089022, 456089023, 456089024, 456089025, 678689287']);
$result = $sth->fetchAll();
print_r($result);

其中只有678689287是存在的,结果返回为空;如果把678689287放在第一位,就有返回。

是不是个bug?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

山有枢 2022-09-08 21:48:06

用预处理的的select...in语句,你得生成与查询数量相同的占位符

$queryParams = [456089015, 456089016, 456089017, 456089018, 456089019, 456089020, 456089021, 456089022, 456089023, 456089024, 456089025, 678689287];
$markers = str_repeat('?,', count($queryParams) - 1) . '?';
$st = $dbh->prepare("SELECT * FROM user WHERE id IN (${markers}) ORDER BY id ASC");
$st->execute($queryParams);
$result = $st->fetchAll();
倒带 2022-09-08 21:48:06

和我以前犯的错误一样,in后面的数值范围,有多少个数值,就来多少个问号,一个问号不行。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文