کلاس PHP برای کار با MySQLi
#1
Note 
کد php:
<?php
    
/**
    * Make an array of references to the values of another array
    * Note: useful when references rather than values are required
    * @param {array} array of values 
    * @return {array} references array
    */
    
function makeRefArr(&$arr) {
        
$refs = array();
        
        foreach(
$arr as $key => &$val) {
            
$refs[$key] = &$val;
        }
        
        return 
$refs;
    }

    
/**
    * Make a recursive copy of an array
    * @param {array} original array
    * @param {boolean} should the values to be cloned too?
    * @return {array} copy of source array
    */
    
function array_copy($arr$deeptrue) {
        
$newArr = array();
        
        if (
$deep) {
            foreach (
$arr as $key=>$val) {
                if (
is_object($val)) {
                    
$newArr[$key] = clone($val);
                } else if (
is_array($val)) {
                    
$newArr[$key] = array_copy($val);
                } else {
                    
$newArr[$key] = $val;
                }
            }
        } else {
            foreach (
$arr as $key=>$val) {
                
$newArr[$key] = $val;
            }
        }
        
        return 
$newArr;
    }

    
/**
    * A mysqli wrapper class
    *
    * @author Andrew Lowndes (APL Web)
    * @date 20/11/2010
    */
    
class db {
        public static 
$db null;
        
        
//connect to the database
        
public static function connect() {
            
self::$db = new mysqli('localhost''root' ,'''test');
            
            if (
mysqli_connect_errno()) {
                throw new 
Exception('Connection failed: ' mysqli_connect_error());
            }
            
            
self::$db->set_charset("utf8");
        }
        
        
//close the connection
        
public static function close() {
            if (
self::$db) {
                
self::$db->close();
            }
        }
        
        
/**
        * Run a query and return the result
        * @param {string} query to run (with '?' for values)
        * @param {array} values to execute in prepared statement (optional)
        * @return {resource} result
        */
        
public static function query($query$objs = array()) {
            if (!
self::$dbself::connect();
            
            
$objs = (array)$objs//automagically cast single values into an array
            
            
$statement self::$db->prepare($query);
            
            if (!
$statement) {
                throw new 
Exception('Query failed: ' self::$db->error);
            }
            
            
//go through all of the provided objects and bind them
            
$types = array();
            
$values = array();
            
            if (
count($objs)>0) {
                foreach (
$objs as $obj) {
                    
//get the object type and translate it ready for bind parameter
                    
$type gettype($obj);
                    
                    switch (
$type) {
                        case 
'boolean': case 'integer':
                            
$types[] = 'i';
                            
$values[] = intval($obj);
                            break;
                        case 
'double':
                            
$types[] = 'd';
                            
$values[] = doubleval($obj);
                            break;
                        case 
'string':
                            
$types[] = 's';
                            
$values[] = (string)$obj;
                            break;
                        case 
'array': case 'object':
                            
$types[] = 's';
                            
$values[] = json_encode($obj);
                            break;
                        case 
'resource': case 'null': case 'unknown type': default:
                            throw new 
Exception('Unsupported object passed through as query prepared object!');
                    }
                }
                
                
$params makeRefArr($values);
                
array_unshift($paramsimplode(''$types));
                
call_user_func_array(array($statement'bind_param'), $params);
            }
            
            if (!
$statement->execute()) {
                return 
null;
            } else {
                
$statement->store_result();
                return 
$statement;
            }
        }
        
        
/**
        * Determine if an object exists
        * @param {string} query to run
        * @param {array} objects to use in prepare query (optional)
        * @return {boolean} object exists in database
        */
        
public static function objectExists($query$objs = array()) {
            
$statement self::query($query$objs);
            
            return (
is_object($statement) && $statement->num_rows>0);
        }
        
        
/**
        * Make an associative array of field names from a statement
        * @param {resource} mysqli statement
        * @return {array} field names array
        */
        
private static function getFieldNames($statement) {
            
$result $statement->result_metadata();
            
$fields $result->fetch_fields();
            
            
$fieldNames = array();
            foreach(
$fields as $field) {
                
$fieldNames[$field->name] = null;
            }
            
            return 
$fieldNames;
        }
        
        
/**
        * Get an object from a query
        * @param {string} query to execute
        * @param {array} objects to use as the values (optional) 
        * @return {assoc} sinulatobject
        */
        
public static function getObject($query$objs = array()) {
            
$statement self::query($query$objs);
            
            if (!
is_object($statement) || $statement->num_rows<1) {
                return 
null;
            }
            
            
$fieldNames self::getFieldNames($statement);
            
call_user_func_array(array($statement'bind_result'), makeRefArr($fieldNames));
            
            
$statement->fetch();
            
$statement->close();
            
            return 
$fieldNames;
        }
        
        
/**
        * Get a list of objects from the database
        * @param {string} query
        * @return {array} objects
        */
        
public static function getObjects($query$objs = array()) {
            
$statement self::query($query$objs);
            
            if (!
is_object($statement) || $statement->num_rows<1) {
                return array();
            }
            
            
$fieldNames self::getFieldNames($statement);
            
call_user_func_array(array($statement'bind_result'), makeRefArr($fieldNames));
            
            
$results = array();
            while (
$statement->fetch()) {
                
$results[] = array_copy($fieldNames);
            }
            
            
$statement->close();
            
            return 
$results;
        }
        
        
/**
        * Get all of the data from a table
        * @param {string} table name
        * @return {array} table data
        */
        
public static function getTable($tableName) {
            if (!
self::$dbself::connect();
            
            
$tableName self::$db->escape_string($tableName);
            
            return 
self::getObjects('SELECT * FROM `' $tableName '`;');
        }
        
        
/**
        * Get a field from a table based on a field having a specific value
        * @param {string} table name
        * @param {string} field name
        * @param {mixed} field value
        * @return {array} table row data
        */
        
public static function getTableRow($tableName$field$value) {
            if (!
self::$dbself::connect();
            
            
$tableName self::$db->escape_string($tableName);
            
$field self::$db->escape_string($field);
            
            return 
self::getObject('SELECT * FROM `' $tableName '` WHERE `' $field '` = ? LIMIT 1;'$value);
        }
        
        
/**
        * Get all related rows from a table based on a field having a specific value
        * @param {string} table name
        * @param {string} field name
        * @param {mixed} field value
        * @return {array} table row data
        */
        
public static function getTableRows($tableName$field$value$sortField null$sortDesc false) {
            if (!
self::$dbself::connect();
            
            
$tableName self::$db->escape_string($tableName);
            
$field self::$db->escape_string($field);
            
            if (
$sortField == null) {
                
$sortField $field;
            } else {
                
$sortField self::$db->escape_string($sortField);
            }
            
            return 
self::getObjects('SELECT * FROM `' $tableName '` WHERE `' $field '` = ? ORDER BY `' $sortField '` ' . ($sortDesc 'DESC' 'ASC') . ';'$value);
        }
    }
?>

Shy
When we speak of “free software”, we're talking about freedom, not price
پاسخ
ایجاد موضوع جدید   پاسخ به موضوع  

موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
Note مثالی از mysqli PHP.sec 0 174 07-04-2014 ساعت 15:51
آخرین ارسال: PHP.sec

کاربرانِ درحال بازدید از این موضوع:   1 مهمان