/** * Cast data into int, float or string. * * INFO: install / use "mysqlnd"-driver for better performance * * @param array|object $data * * @return array|false false on error */ private function cast(&$data) { if (Helper::isMysqlndIsUsed() === true) { return $data; } // init static $fields = array(); static $types = array(); $result_hash = spl_object_hash($this->_result); if (!isset($fields[$result_hash])) { $fields[$result_hash] = \mysqli_fetch_fields($this->_result); } if ($fields[$result_hash] === false) { return false; } if (!isset($types[$result_hash])) { foreach ($fields[$result_hash] as $field) { switch ($field->type) { case 3: $types[$result_hash][$field->name] = 'int'; break; case 4: $types[$result_hash][$field->name] = 'float'; break; default: $types[$result_hash][$field->name] = 'string'; break; } } } if (is_array($data) === true) { foreach ($types[$result_hash] as $type_name => $type) { if (isset($data[$type_name])) { settype($data[$type_name], $type); } } } elseif (is_object($data)) { foreach ($types[$result_hash] as $type_name => $type) { if (isset($data->{$type_name})) { settype($data->{$type_name}, $type); } } } return $data; }
/** * Open a new connection to the MySQL server. * * @return boolean */ public function connect() { if ($this->isReady()) { return true; } \mysqli_report(MYSQLI_REPORT_STRICT); try { $this->link = \mysqli_init(); if (Helper::isMysqlndIsUsed() === true) { \mysqli_options($this->link, MYSQLI_OPT_INT_AND_FLOAT_NATIVE, true); } /** @noinspection PhpUsageOfSilenceOperatorInspection */ $this->connected = @\mysqli_real_connect($this->link, $this->hostname, $this->username, $this->password, $this->database, $this->port, $this->socket); } catch (\Exception $e) { $this->_debug->displayError('Error connecting to mysql server: ' . $e->getMessage(), true); } \mysqli_report(MYSQLI_REPORT_OFF); if (!$this->connected) { $this->_debug->displayError('Error connecting to mysql server: ' . \mysqli_connect_error(), true); } else { $this->set_charset($this->charset); } return $this->isReady(); }