📄 common.php
字号:
$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;
$value = preg_replace('/[^\d\.,\-+eE]/', '', $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
*
* @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);
}
$escaped = $db->escape($value);
if (PEAR::isError($escaped)) {
return $escaped;
}
$match.= $db->escapePattern($escaped);
}
}
$match.= "'";
$match.= $this->patternEscapeString();
return $match;
}
// }}}
// {{{ patternEscapeString()
/**
* build string to define pattern escape character
*
* @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;
}
// If the user has specified an option to map the native field
// type to a custom MDB2 datatype...
$db_type = strtok($field['type'], '(), ');
if (!empty($db->options['nativetype_map_callback'][$db_type])) {
return call_user_func_array($db->options['nativetype_map_callback'][$db_type], array($db, $field));
}
// Otherwise perform the built-in (i.e. normal) MDB2 native type to
// MDB2 datatype conversion
return $this->_mapNativeDatatype($field);
}
// }}}
// {{{ _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 + -