📄 common.php
字号:
if (PEAR::isError($db)) { return $db; } if (isset($db->function) && is_a($db->function, 'MDB2_Driver_Function_Common')) { return $db->function->now('date'); } return 'CURRENT_DATE'; } return $this->_quoteText($value, $quote, $escape_wildcards); } // }}} // {{{ _quoteTimestamp() /** * Convert a text value into a DBMS specific format that is suitable to * compose query statements. * * @param string $value text string value that is intended to be converted. * @param bool $quote determines if the value should be quoted and escaped * @param bool $escape_wildcards if to escape escape wildcards * @return string text string that represents the given argument value in * a DBMS specific format. * @access protected */ function _quoteTimestamp($value, $quote, $escape_wildcards) { if ($value === 'CURRENT_TIMESTAMP') { $db =& $this->getDBInstance(); if (PEAR::isError($db)) { return $db; } if (isset($db->function) && is_a($db->function, 'MDB2_Driver_Function_Common')) { return $db->function->now('timestamp'); } return 'CURRENT_TIMESTAMP'; } return $this->_quoteText($value, $quote, $escape_wildcards); } // }}} // {{{ _quoteTime() /** * Convert a text value into a DBMS specific format that is suitable to * compose query statements. * * @param string $value text string value that is intended to be converted. * @param bool $quote determines if the value should be quoted and escaped * @param bool $escape_wildcards if to escape escape wildcards * @return string text string that represents the given argument value in * a DBMS specific format. * @access protected */ function _quoteTime($value, $quote, $escape_wildcards) { if ($value === 'CURRENT_TIME') { $db =& $this->getDBInstance(); if (PEAR::isError($db)) { return $db; } if (isset($db->function) && is_a($db->function, 'MDB2_Driver_Function_Common')) { return $db->function->now('time'); } return 'CURRENT_TIME'; } return $this->_quoteText($value, $quote, $escape_wildcards); } // }}} // {{{ _quoteFloat() /** * Convert a text value into a DBMS specific format that is suitable to * compose query statements. * * @param string $value text string value that is intended to be converted. * @param bool $quote determines if the value should be quoted and escaped * @param bool $escape_wildcards if to escape escape wildcards * @return string text string that represents the given argument value in * a DBMS specific format. * @access protected */ function _quoteFloat($value, $quote, $escape_wildcards) { if (preg_match('/^(.*)e([-+])(\d+)$/i', $value, $matches)) { $decimal = $this->_quoteDecimal($matches[1], $quote, $escape_wildcards); $sign = $matches[2]; $exponent = str_pad($matches[3], 2, '0', STR_PAD_LEFT); $value = $decimal.'E'.$sign.$exponent; } else { $value = $this->_quoteDecimal($value, $quote, $escape_wildcards); } return $value; } // }}} // {{{ _quoteDecimal() /** * Convert a text value into a DBMS specific format that is suitable to * compose query statements. * * @param string $value text string value that is intended to be converted. * @param bool $quote determines if the value should be quoted and escaped * @param bool $escape_wildcards if to escape escape wildcards * @return string text string that represents the given argument value in * a DBMS specific format. * @access protected */ function _quoteDecimal($value, $quote, $escape_wildcards) { $value = (string)$value; if (preg_match('/[^.0-9]/', $value)) { if (strpos($value, ',')) { // 1000,00 if (!strpos($value, '.')) { // convert the last "," to a "." $value = strrev(str_replace(',', '.', strrev($value))); // 1.000,00 } elseif (strpos($value, '.') && strpos($value, '.') < strpos($value, ',')) { $value = str_replace('.', '', $value); // convert the last "," to a "." $value = strrev(str_replace(',', '.', strrev($value))); // 1,000.00 } else { $value = str_replace(',', '', $value); } } } return $value; } // }}} // {{{ writeLOBToFile() /** * retrieve LOB from the database * * @param resource $lob stream handle * @param string $file name of the file into which the LOb should be fetched * @return mixed MDB2_OK on success, a MDB2 error on failure * @access protected */ function writeLOBToFile($lob, $file) { $db =& $this->getDBInstance(); if (PEAR::isError($db)) { return $db; } if (preg_match('/^(\w+:\/\/)(.*)$/', $file, $match)) { if ($match[1] == 'file://') { $file = $match[2]; } } $fp = @fopen($file, 'wb'); while (!@feof($lob)) { $result = @fread($lob, $db->options['lob_buffer_length']); $read = strlen($result); if (@fwrite($fp, $result, $read) != $read) { @fclose($fp); return $db->raiseError(MDB2_ERROR, null, null, 'could not write to the output file', __FUNCTION__); } } @fclose($fp); return MDB2_OK; } // }}} // {{{ _retrieveLOB() /** * retrieve LOB from the database * * @param array $lob array * @return mixed MDB2_OK on success, a MDB2 error on failure * @access protected */ function _retrieveLOB(&$lob) { if (is_null($lob['value'])) { $lob['value'] = $lob['resource']; } $lob['loaded'] = true; return MDB2_OK; } // }}} // {{{ readLOB() /** * Read data from large object input stream. * * @param resource $lob stream handle * @param string $data reference to a variable that will hold data * to be read from the large object input stream * @param integer $length value that indicates the largest ammount ofdata * to be read from the large object input stream. * @return mixed the effective number of bytes read from the large object * input stream on sucess or an MDB2 error object. * @access public * @see endOfLOB() */ function _readLOB($lob, $length) { return substr($lob['value'], $lob['position'], $length); } // }}} // {{{ _endOfLOB() /** * Determine whether it was reached the end of the large object and * therefore there is no more data to be read for the its input stream. * * @param array $lob array * @return mixed true or false on success, a MDB2 error on failure * @access protected */ function _endOfLOB($lob) { return $lob['endOfLOB']; } // }}} // {{{ destroyLOB() /** * Free any resources allocated during the lifetime of the large object * handler object. * * @param resource $lob stream handle * @access public */ function destroyLOB($lob) { $lob_data = stream_get_meta_data($lob); $lob_index = $lob_data['wrapper_data']->lob_index; fclose($lob); if (isset($this->lobs[$lob_index])) { $this->_destroyLOB($this->lobs[$lob_index]); unset($this->lobs[$lob_index]); } return MDB2_OK; } // }}} // {{{ _destroyLOB() /** * Free any resources allocated during the lifetime of the large object * handler object. * * @param array $lob array * @access private */ function _destroyLOB(&$lob) { return MDB2_OK; } // }}} // {{{ implodeArray() /** * apply a type to all values of an array and return as a comma seperated string * useful for generating IN statements * * @access public * * @param array $array data array * @param string $type determines type of the field * * @return string comma seperated values */ function implodeArray($array, $type = false) { if (!is_array($array) || empty($array)) { return 'NULL'; } if ($type) { foreach ($array as $value) { $return[] = $this->quote($value, $type); } } else { $return = $array; } return implode(', ', $return); } // }}} // {{{ matchPattern() /** * build a pattern matching string * * EXPERIMENTAL * * WARNING: this function is experimental and may change signature at * any time until labelled as non-experimental * * @access public * * @param array $pattern even keys are strings, odd are patterns (% and _) * @param string $operator optional pattern operator (LIKE, ILIKE and maybe others in the future) * @param string $field optional field name that is being matched against * (might be required when emulating ILIKE) * * @return string SQL pattern */ function matchPattern($pattern, $operator = null, $field = null) { $db =& $this->getDBInstance(); if (PEAR::isError($db)) { return $db; } $match = ''; if (!is_null($operator)) { $operator = strtoupper($operator); switch ($operator) { // case insensitive case 'ILIKE': if (is_null($field)) { return $db->raiseError(MDB2_ERROR_UNSUPPORTED, null, null, 'case insensitive LIKE matching requires passing the field name', __FUNCTION__); } $db->loadModule('Function', null, true); $match = $db->function->lower($field).' '.'LIKE '; break; // case sensitive case 'LIKE': $match = is_null($field) ? 'LIKE ' : $field.' LIKE '; break; default: return $db->raiseError(MDB2_ERROR_UNSUPPORTED, null, null, 'not a supported operator type:'. $operator, __FUNCTION__); } } $match.= "'"; foreach ($pattern as $key => $value) { if ($key % 2) { $match.= $value; } else { if ($operator === 'ILIKE') { $value = strtolower($value); } $match.= $db->escapePattern($db->escape($value)); } } $match.= "'"; $match.= $this->patternEscapeString(); return $match; } // }}} // {{{ patternEscapeString() /** * build string to define pattern escape character * * EXPERIMENTAL * * WARNING: this function is experimental and may change signature at * any time until labelled as non-experimental * * @access public * * @return string define pattern escape character */ function patternEscapeString() { return ''; } // }}} // {{{ mapNativeDatatype() /** * Maps a native array description of a field to a MDB2 datatype and length * * @param array $field native field description * @return array containing the various possible types, length, sign, fixed * @access public */ function mapNativeDatatype($field) { $db =& $this->getDBInstance(); if (PEAR::isError($db)) { return $db; } return $db->raiseError(MDB2_ERROR_UNSUPPORTED, null, null, 'method not implemented', __FUNCTION__); } // }}} // {{{ mapPrepareDatatype() /** * Maps an mdb2 datatype to mysqli prepare type * * @param string $type * @return string * @access public */ function mapPrepareDatatype($type) { $db =& $this->getDBInstance(); if (PEAR::isError($db)) { return $db; } if (!empty($db->options['datatype_map'][$type])) { $type = $db->options['datatype_map'][$type]; if (!empty($db->options['datatype_map_callback'][$type])) { $parameter = array('type' => $type); return call_user_func_array($db->options['datatype_map_callback'][$type], array(&$db, __FUNCTION__, $parameter)); } } return $type; }}?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -