搜索

首页  >  问答  >  正文

php - 这个是pdo的bug吗?

1

2

3

4

5

6

7

8

<code>$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);

</code>

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

是不是个bug?

阿神阿神2873 天前781

全部回复(3)我来回复

  • ringa_lee

    ringa_lee2017-04-10 16:26:05

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

    1

    2

    3

    4

    5

    <code class="php">$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();</code>

    回复
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 16:26:05

    pdo不支持这种数组绑定

    回复
    0
  • 怪我咯

    怪我咯2017-04-10 16:26:05

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

    回复
    0
  • 取消回复