选择和call_user_func_array问题

时间:2014-04-05 09:23:46

标签: php mysqli

我有这个功能:

private function db_bind_array($stmt, &$row) {
  $md = $stmt->result_metadata();
  $param = array();
  while($field = $md->fetch_field()) { $param[] = &$row[$field->name];}
  return call_user_func_array(array($stmt, 'bind_result'), $param);
}
private function db_query($sql, $bind_param, $param) {
  if($stmt = $this->conn->prepare($sql)) {
  if(!$bindRet = call_user_func_array(array($stmt,'bind_param'),
  array_merge(array($bind_param), $param))) $this->Terminate();
  if(!$stmt->execute()) $this->Terminate();
  $res = array();
  if($this->db_bind_array($stmt, $res)) return array($stmt, $res);
  }
}

protected function Select($recs, $table, $where, $bind_param, $param, $order_by = '', $sort = '', $limit = 1) {
  if($order_by != '') $order_by = 'ORDER BY '.$order_by;
  $sql = "SELECT $recs FROM $table WHERE $where $order_by $sort LIMIT $limit";
  return $this->ExeSelect($sql, $bind_param, $param);
}
private function ExeSelect($sql, $bind_param, $param) {
  if($res = $this->db_query($sql, $bind_param, array(&$param))) {
  $stmt = $res[0]; $row  = $res[1];
  while($stmt->fetch()) {$this->row = $row; return $row;}
  $stmt->close();
  }
}

我用它:     $ row = $ this->选择(' id,姓名,标题,'文章',其中id>,' i',10,' DESC& #39;,'',10)

问题是它只返回一条记录而不是10条记录。 问题是什么? 感谢

1 个答案:

答案 0 :(得分:1)

问题在于这一行:while($stmt->fetch()) {$this->row = $row; return $row;}。您立即返回该结果。在返回之前构建一个数组。

private function ExeSelect($sql, $bind_param, $param) {
    $ret = array();
    if($res = $this->db_query($sql, $bind_param, array(&$param))) {
        $stmt = $res[0]; $row  = $res[1];
        while($stmt->fetch()) {$ret[] = $row; }
        $stmt->close();
    }
    return $ret;
}