使用PDO的fetchAll辅助函数

时间:2010-09-16 10:46:13

标签: php mysql pdo

假设我有一个功能

function fetchAll(){
  $args = func_get_args();
  $query = array_shift($args);
  $query = str_replace("%s","'%s'",$query);
  foreach ($args as $key => $val) {
    $args[$key] = mysql_real_escape_string($val);
  }
  $query = vsprintf($query, $args);
  if (!$query) return FALSE;

  $res = mysql_query($query);
  if (!$res) {
    trigger_error("db: ".mysql_error()." in ".$query);
    return FALSE;
  }
  $a = array();
  while($row = mysql_fetch_assoc($res)) $a[]=$row;
  return $a;
}

然后像这样使用它

$a=$db->fetchAll("SELECT * FROM users WHERE status=%s LIMIT %d,%d",$status,$start,$num);

如何使用PDO重写它?
我能找到的每个例子都只显示如何直接绑定参数。我应该传递变量类型以及它的值吗?或者这个调用总是4行 - 3个绑定并执行?

2 个答案:

答案 0 :(得分:1)

编辑,如上校所示,显然这(不再是?)适用于LIMIT条款。


如果您使用的是简单查询/不打扰类型:

function fetchAll(){
   $args = func_get_args();
   $query = array_shift($args);//'SELECT * FROM users WHERE status=? LIMIT ?,?'
   //you'll need a reference to your PDO instance $pdo somewhere....
   $stmt = $pdo->prepare($query);
   $stmt->execute($args);
   return $stmt->fetchAll();
}

答案 1 :(得分:0)

  

我能找到的每个例子都只显示   如何直接绑定参数。   我应该传递变量类型吗?   它的价值?或者让这个电话总是4   line - 3绑定并执行?

你不必一次开火绑一行;你可以用这样的数组绑定:

# the data we want to insert  
$data = array('Cathy', '9 Dark and Twisty Road', 'Cardiff');  

$STH = $DBH->("INSERT INTO folks (name, addr, city) values (?, ?, ?)");  
$STH->execute($data);