代码之家  ›  专栏  ›  技术社区  ›  JD Isaacks

从数据库值填充数组的最有效方法是什么?

  •  1
  • JD Isaacks  · 技术社区  · 15 年前

    如果我想得到某个品牌的产品清单。我会这样做:

    $id_list = array();
    $qry = 'SELECT product_id FROM products WHERE product_brand = :brand';
    $STH = $this->pdo->prepare($qry);
    $STH->execute(array("brand" => $brand));
    $STH->setFetchMode(PDO::FETCH_ASSOC);
    while($row = $STH->fetch())
    {
        $id_list[] = $row['product_id'];
    }
    

    有更快更有效的方法吗?如果我只选择1列,那么应该有更好的方法来选择/插入到数组中。

    1 回复  |  直到 15 年前
        1
  •  4
  •   Wrikken    15 年前
    $STH->setFetchMode(PDO::FETCH_COLUMN,0);
    $id_list = $STH->fetchAll();
    

    真的更快吗?本地基准:

    $ cat 1.php 
    <?php
    $d = new PDO('mysql:localhost');
    $qry = 'SELECT SQL_NO_CACHE bar FROM test.foo'; //for completeness sake: foo has 400 rows
    $stmt = $d->query($qry);
    $stmt->setFetchMode(PDO::FETCH_COLUMN,0);
    $check = $stmt->fetchAll();
    ?>
    $ cat 2.php 
    <?php
    $d = new PDO('mysql:localhost');
    $qry = 'SELECT SQL_NO_CACHE bar FROM test.foo'; //for completeness sake: foo has 400 rows
    $stmt = $d->query($qry);
    $check = array();
    $stmt->setFetchMode(PDO::FETCH_ASSOC);
    while($row = $stmt->fetch()){
            $check[] = $row['bar'];
    }
    ?>
    $ time (for i in {1..100}; do php 1.php; done;)
    
    real    0m4.507s
    user    0m2.392s
    sys     0m1.288s
    $ time (for i in {1..100}; do php 2.php; done;)
    
    real    0m6.830s
    user    0m3.352s
    sys     0m2.328s
    

    …所以,至少在我的服务器上,这个脚本差异更快…

    推荐文章