Classe de base de données PHP MySQL ultra-rapide

0

 


Classe de base de données PHP MySQL ultra-rapide

Cette classe de base de données légère est écrite avec PHP et utilise l'extension MySQLi, elle utilise des instructions préparées pour sécuriser correctement vos requêtes, pas besoin de vous soucier des attaques par injection SQL.

L'extension MySQLi a des instructions préparées intégrées avec lesquelles vous pouvez travailler, cela empêchera l'injection SQL et empêchera votre base de données d'être exposée, certains développeurs ne savent pas comment utiliser correctement ces méthodes, j'ai donc créé cette classe de base de données facile à utiliser cela fera le travail pour vous.

Cette classe de base de données est conviviale pour les débutants et facile à mettre en œuvre, avec les méthodes natives MySQLi, vous devez écrire 3 à 7 lignes de code pour récupérer les données d'une base de données, avec cette classe, vous pouvez le faire avec seulement 1 à 2 lignes de code, et est beaucoup plus facile à comprendre.

La source

Créez un nouveau fichier et nommez-le db.php et ajoutez :

PHPCopie
<?php
class db {

    protected $connection;
	protected $query;
    protected $show_errors = TRUE;
    protected $query_closed = TRUE;
	public $query_count = 0;

	public function __construct($dbhost = 'localhost', $dbuser = 'root', $dbpass = '', $dbname = '', $charset = 'utf8') {
		$this->connection = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
		if ($this->connection->connect_error) {
			$this->error('Failed to connect to MySQL - ' . $this->connection->connect_error);
		}
		$this->connection->set_charset($charset);
	}

    public function query($query) {
        if (!$this->query_closed) {
            $this->query->close();
        }
		if ($this->query = $this->connection->prepare($query)) {
            if (func_num_args() > 1) {
                $x = func_get_args();
                $args = array_slice($x, 1);
				$types = '';
                $args_ref = array();
                foreach ($args as $k => &$arg) {
					if (is_array($args[$k])) {
						foreach ($args[$k] as $j => &$a) {
							$types .= $this->_gettype($args[$k][$j]);
							$args_ref[] = &$a;
						}
					} else {
	                	$types .= $this->_gettype($args[$k]);
	                    $args_ref[] = &$arg;
					}
                }
				array_unshift($args_ref, $types);
                call_user_func_array(array($this->query, 'bind_param'), $args_ref);
            }
            $this->query->execute();
           	if ($this->query->errno) {
				$this->error('Unable to process MySQL query (check your params) - ' . $this->query->error);
           	}
            $this->query_closed = FALSE;
			$this->query_count++;
        } else {
            $this->error('Unable to prepare MySQL statement (check your syntax) - ' . $this->connection->error);
        }
		return $this;
    }


	public function fetchAll($callback = null) {
	    $params = array();
        $row = array();
	    $meta = $this->query->result_metadata();
	    while ($field = $meta->fetch_field()) {
	        $params[] = &$row[$field->name];
	    }
	    call_user_func_array(array($this->query, 'bind_result'), $params);
        $result = array();
        while ($this->query->fetch()) {
            $r = array();
            foreach ($row as $key => $val) {
                $r[$key] = $val;
            }
            if ($callback != null && is_callable($callback)) {
                $value = call_user_func($callback, $r);
                if ($value == 'break') break;
            } else {
                $result[] = $r;
            }
        }
        $this->query->close();
        $this->query_closed = TRUE;
		return $result;
	}

	public function fetchArray() {
	    $params = array();
        $row = array();
	    $meta = $this->query->result_metadata();
	    while ($field = $meta->fetch_field()) {
	        $params[] = &$row[$field->name];
	    }
	    call_user_func_array(array($this->query, 'bind_result'), $params);
        $result = array();
		while ($this->query->fetch()) {
			foreach ($row as $key => $val) {
				$result[$key] = $val;
			}
		}
        $this->query->close();
        $this->query_closed = TRUE;
		return $result;
	}

	public function close() {
		return $this->connection->close();
	}

    public function numRows() {
		$this->query->store_result();
		return $this->query->num_rows;
	}

	public function affectedRows() {
		return $this->query->affected_rows;
	}

    public function lastInsertID() {
    	return $this->connection->insert_id;
    }

    public function error($error) {
        if ($this->show_errors) {
            exit($error);
        }
    }

	private function _gettype($var) {
	    if (is_string($var)) return 's';
	    if (is_float($var)) return 'd';
	    if (is_int($var)) return 'i';
	    return 'b';
	}

}
?>

Comment utiliser


Connectez-vous à la base de données MySQL :

include 'db.php';

$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$dbname = 'example';

$db = new db($dbhost, $dbuser, $dbpass, $dbname);

Extraire un enregistrement d'une base de données :

$account = $db->query('SELECT * FROM accounts WHERE username = ? AND password = ?', 'test', 'test')->fetchArray();
echo $account['name'];

Ou tu peux faire :

$account = $db->query('SELECT * FROM accounts WHERE username = ? AND password = ?', array('test', 'test'))->fetchArray();
echo $account['name'];

Récupérer plusieurs enregistrements d'une base de données :

$accounts = $db->query('SELECT * FROM accounts')->fetchAll();

foreach ($accounts as $account) {
	echo $account['name'] . '<br>';
}

Vous pouvez spécifier un rappel si vous ne souhaitez pas que les résultats soient stockés dans un tableau (utile pour de grandes quantités de données) :

$db->query('SELECT * FROM accounts')->fetchAll(function($account) {
    echo $account['name'];
});

Si vous avez besoin de casser la boucle, vous pouvez ajouter :

return 'break'; 

Obtenez le nombre de lignes :

$accounts = $db->query('SELECT * FROM accounts');
echo $accounts->numRows();

Obtenez le nombre de lignes concernées :

$insert = $db->query('INSERT INTO accounts (username,password,email,name) VALUES (?,?,?,?)', 'test', 'test', 'test@gmail.com', 'Test');
echo $insert->affectedRows();

Obtenez le nombre total de requêtes :

echo $db->query_count;

Obtenez le dernier ID d'insertion :

echo $db->lastInsertID();

Fermez la base de données :

$db->close();

Conclusion

La classe de base de données utilise l'extension MySQLi, elle est intégrée à la version PHP >= 5.0.0. Si vous utilisez PHP version 5.0.0 à 5.3.0, vous aurez besoin d'installer : mysqlnd .

Pas besoin de préparer des instructions à l'aide de cette classe, elle le fera automatiquement pour vous (écrire moins, faire plus), vos requêtes seront sécurisées, n'oubliez pas de vous assurer d'échapper à votre sortie en utilisant htmlspecialchars, ou votre méthode d'échappement préférée.

Vous êtes libre d'utiliser cette classe de base de données dans vos projets.

Tags

Post a Comment

0Comments
Post a Comment (0)