res = $res; $this->connection = $connection; $this->meta = \mysqli_stmt_result_metadata($this->res); if(!$this->meta){ //occurs on insert //throw new \Exception("Could not retrieve meta for prepare statement");} return;} while ($field = $this->meta->fetch_field() ) { $ref = $field->table.'.'.$field->name; $$ref = null; $this->binds[$ref] = &$$ref; } //fix for ambiguous fieldnames \mysqli_free_result($this->meta); $this->res->bind_result(...array_values($this->binds)); } /** * Close Resultset upon destruction */ public function __destruct() { $this->close();} /** * Closes the Resultset * * @return null Returns null */ public function close(){ \mysqli_stmt_free_result($this->res); return \mysqli_stmt_close($this->res);} /** * Counts the Lines in the Resultset * * @return int Returns number of lines in the result */ public function count(){ return \mysqli_stmt_num_rows($this->res);} /** * Counts the affected lines in the Resultset * * @return int Returns number of affected lines in the result */ public function affectedRows(){ return \mysqli_stmt_affected_rows($this->res);} /** * Returns the next line in the Resultset * * @param bool $object Determines if the result will be an object or array * @param int $result_type Mysql Fetch result Type * @return array Returns an array(object) containing the next line */ public function next($object = false, $result_type = MYSQLI_BOTH){ if(\mysqli_stmt_fetch($this->res)){ foreach( $this->binds as $key=>$value ){ $row[substr($key, strpos($key, '.')+1)] = $value;} //fix for ambiguous fieldnames return $row;} return NULL; } /** * Seeks an amount of lines within the Resultset * * @param int $row_number Lines to seek over * @return bool Returns true or false */ public function seek($row_number){ return \mysqli_stmt_data_seek($this->res,$row_number);} public function insert_id(){ return $this->connection->insert_id(); } }