/** * Mysqli's binding and returning of statement values * Mysqli requires you to bind variables to the extension in order to * get data out. These values have to be references: * * @see http://php.net/manual/en/mysqli-stmt.bind-result.php * @throws Exception\RuntimeException * @return bool */ protected function loadDataFromMysqliStatement() { $data = null; // build the default reference based bind structure, if it does not already exist if ($this->statementBindValues['keys'] === null) { $this->statementBindValues['keys'] = array(); /* @var $resultResource \mysqli_result */ $resultResource = $this->resource->result_metadata(); foreach ($resultResource->fetch_fields() as $col) { $this->statementBindValues['keys'][] = $col->name; } $this->statementBindValues['values'] = array_fill(0, count($this->statementBindValues['keys']), null); $refs = array(); foreach ($this->statementBindValues['values'] as $i => &$f) { $refs[$i] =& $f; } call_user_func_array(array($this->resource, 'bind_result'), $this->statementBindValues['values']); } if (($r = $this->resource->fetch()) === null) { if (!$this->isBuffered) { $this->resource->close(); } return false; } elseif ($r === false) { throw new Exception\RuntimeException($this->resource->error); } // dereference for ($i = 0, $count = count($this->statementBindValues['keys']); $i < $count; $i++) { $this->currentData[$this->statementBindValues['keys'][$i]] = $this->statementBindValues['values'][$i]; } $this->currentComplete = true; $this->nextComplete = true; $this->position++; return true; }
/** * Go to next row * @param mysqli_result|resource|PDOStatement $result * @return array */ public function nextRow($result) { return $result->fetch(PDO::FETCH_ASSOC); }
/** * Build a radio button group from a set of $data with a specified $name, set the selected * radio button in the group if there is a match found between $selectedValue and button_value. * * If passing a \mysqli_result it must contain fields named as: * - button_value * - button_text * * * @param Array|\mysqli_result $data The data to be used to build the radio button group. * @param string $name The name of the radio button group. * @param mixed $selectedValue The option_value to set as checked. * * @return string */ public function radioButtons($data, $name, $selectedValue = null) { $buttons = ''; if ($data instanceof \PDOStatement) { while ($row = $data->fetch()) { $opts = array('name' => $name, 'value' => $row['button_value'], 'type' => 'radio'); if ($row['button_value'] == $selectedValue) { $opts['checked'] = 'checked'; } //if $button = $this->app['Html']->input($opts); $buttons .= $this->app['Html']->label($row['button_text'] . $button); } //while } else { if (is_array($data)) { foreach ($data as $k => $v) { $opts = array('name' => $name, 'value' => $k, 'type' => 'radio'); if ($k == $selectedValue) { $opts['checked'] = 'checked'; } //if $button = $this->app['Html']->input($opts); $buttons .= $this->app['Html']->label($v . $button); } //foreach } else { } } //el return $buttons; }