PHP PDO功能,寻找一些建议

时间:2011-06-14 15:48:20

标签: php mysql function pdo

我绝不会要求任何人重新编写我的代码,而是找到可以改进代码的地方,或者实现更好的实践。这就是函数简单工作的方式。

函数$Class->getTaxClass()接受至少1个参数,可以是单个ID,也可以是ID的数组。它也可以接受它想要抓取的特定行的值,如$Class->getTaxClass($array, 'name','tid')

所以我真的只是在寻找改进函数代码结构/最佳实践/逻辑的方法,具体如下:

public function getTaxClass()
{
  $arg = func_get_args();
  $or = 'pa.pid = ?';
  if(is_array($arg[0]))
  {
    $i = 1; 
    while($i < count($arg[0]))
    {
      $or .= " OR pa.pid = ?";
      $i ++;      
    }
  }
  if(count($arg) == 1)
  {
    $pid = $arg[0];
    $row = "a.*";
  }
  else if(count($arg > 1))
  {
    $pid = array_shift($arg); 
    $prepared_args = array();
    foreach($arg as $a) {
      $prepared_args[] = "a." . $a;
    }
  $row = implode(',', $prepared_args);
  }

  $stmt = _DB::init()->prepare("SELECT $row
                                FROM tax_class a
                                INNER JOIN products_to_tax_class pa 
                                ON a.tid = pa.tid
                                WHERE ($or)"
                              );     
  if(is_array($arg[0]))
  {
    if($stmt->execute($arg[0])) 
      return $stmt->fetch(PDO::FETCH_ASSOC);
  }
  else
  {
    if($stmt->execute(array($pid))) 
      return $stmt->fetch(PDO::FETCH_ASSOC);
  }                 
}

非常感谢!

1 个答案:

答案 0 :(得分:0)

我的建议:

public function getTaxClass() {
    $args = func_get_args();

    // columns to select:
    $cols = array();
    for ($i=1; $i<=count($args); $i++) {
        $cols[] = "a.{$args[$i]}";
    }
    $cols = count($cols) ? join(',', $cols) : 'a.*';

    // IDs to filter and their placeholders:
    $ids = (array) $args[0];
    $phs = join(',', array_fill(0, count($ids), '?'));

    $stmt = _DB::init()->prepare(
        "SELECT {$cols}
        FROM tax_class a
            INNER JOIN products_to_tax_class pa 
            ON a.tid = pa.tid
        WHERE pa.pid IN ({$phs})"
    );

    if ($stmt->execute($ids)) {
        return $stmt->fetch(PDO::FETCH_ASSOC);
    }
}

P.S。代码未经测试,可能仍会出现一些错误:)