Maison php教程 php手册 一个不错的MySQL类

一个不错的MySQL类

Jun 21, 2016 am 08:51 AM
database query return select

    包含CRUD,事务,树递归查询,分页等. 演示简单的魅力. 所有的参数都escape了,不存在注入问题.

  /*

  * Anthony.chen

  * 2010 reserved

  */

  class DB {

  // Query types

  const SELECT = 1;

  const INSERT = 2;

  const UPDATE = 3;

  const DELETE = 4;

  const T = 't';

  const F = 'f';

  /*

  * Supporting return multiple data;

  */

  public static function insert_table($table_name,$data,$return_id='id',$db='default'){

  if (!is_array($data)){

  return false;

  }

  if (is_null($return_id)){

  self::query(self::SELECT,self::insert($table_name,array_keys($data))->values(array_values($data)))->execute($db);

  return true;

  }

  if (is_string($return_id)){

  $id = self::query(self::SELECT,self::insert($table_name,array_keys($data))->values(array_values($data))." returning ".$return_id)->execute($db)->get($return_id);

  return $id;

  }else{

  if (is_array($return_id)){

  $ids = implode(',',$return_id);

  $r_ids = self::query(self::SELECT,self::insert($table_name,array_keys($data))->values(array_values($data))." returning ".$ids)->execute($db)->current();

  return $r_ids;

  }

  }

  return false;

  }

  public static function update_table($table_name,$id,$data,$id_name='id',$db='default'){

  if (!is_array($data)){

  return false;

  }

  return self::update($table_name)->set($data)->where($id_name ,'=',$id)->execute($db);

  }

  public static function quote($s,$db='default'){

  if(!is_array($s)){

  return Database::instance($db)->quote($s);

  }else{ //Quote array and implode

  $_qs = array();

  foreach ($s as $ele){

  $_qs[] = self::quote($ele,$db);

  }

  $_quoteString = implode(',',$_qs);

  return $_quoteString;

  }

  }

  public static function escape($s,$db='default'){

  return Database::instance($db)->escape($s);

  }

  public static function quote_table($s,$db='default'){

  return Database::instance($db)->quote_table($s);

  }

  public static function getConnection($db = 'default'){

  return Database::instance($db)->getConnection();

  }

  public static function getChildren($table,$returnSql = false ,$pid= '0',$idname='id',$pidname='pid' ,$db='default'){

  $_sql = 'select * from '.$table.' where '.$pidname.'='.self::escape($pid,$db).

  " and $idname ".DB::escape($pid,$db);

  if($returnSql){

  return $_sql;

  }

  $_res = self::query(self::SELECT,$_sql)->execute($db)->as_array();

  if($_res){

  return $_res;

  }else{

  return false;

  }

  }

  /*

  *

  */

  public static function getTree($tableName,$returnSql=false,$startWith='0',$idCol='id',$pidCol='pid', $orderCol='id', $maxDepth=0,$level = 0,$delimiter = ';',$db='default'){

  $_funcParas = array();

  $_funcParas[] = self::quote($tableName,$db); //TableView

  $_funcParas[] = self::quote($idCol,$db); //ID column

  $_funcParas[] = self::quote($pidCol,$db); //Parent ID Column

  $_funcParas[] = self::quote($orderCol,$db); //Default Order by ASC

  $_funcParas[] = self::quote($startWith,$db); //Begin NODE

  $_funcParas[] = self::quote($maxDepth,$db); //Begin Depth of traverse

  $_funcParas[] = self::quote($delimiter,$db); //Delimitor,default ';'

  $_sql = 'select * from connectby('

  .implode(',',$_funcParas).')'

  .' as t(id int, pid int, level int, branch text, pos int)';

  if($level > 0){

  $_sql .= ' where level >='.self::quote($level);

  }

  if($returnSql) return $_sql;

  $_res = self::query(self::SELECT,$_sql,true)->execute($db)->as_array();

  if($_res){

  return $_res;

  }else{

  return false;

  }

  }

  public static function begin($db='default'){

  DB::query(Database::UPDATE, "BEGIN")->execute($db);

  }

  public static function commit($db='default'){

  DB::query(Database::UPDATE, "COMMIT")->execute($db);

  }

  public static function rollback($db='default'){

  DB::query(Database::UPDATE, "ROLLBACK")->execute($db);

  }

  /**

  * Create a new [Database_Query] of the given type.

  *

  * // Create a new SELECT query

  * $query = DB::query(Database::SELECT, 'SELECT * FROM users');

  *

  * // Create a new DELETE query

  * $query = DB::query(Database::DELETE, 'DELETE FROM users WHERE id = 5');

  *

  * Specifying the type changes the returned result. When using

  * `Database::SELECT`, a [Database_Query_Result] will be returned.

  * `Database::INSERT` queries will return the insert id and number of rows.

  * For all other queries, the number of affected rows is returned.

  *

  * @param integer type: Database::SELECT, Database::UPDATE, etc

  * @param string SQL statement

  * @return Database_Query

  */

  public static function query($type, $sql,$as_object = false)

  {

  return new Database_Query($type, $sql,$as_object);

  }

  /**

  * Create a new [Database_Query_Builder_Select]. Each argument will be

  * treated as a column. To generate a `foo AS bar` alias, use an array.

  *

  * // SELECT id, username

  * $query = DB::select('id', 'username');

  *

  * // SELECT id AS user_id

  * $query = DB::select(array('id', 'user_id'));

  *

  * @param mixed column name or array($column, $alias) or object

  * @param ...

  * @return Database_Query_Builder_Select

  */

  public static function select($columns = NULL)

  {

  return new Database_Query_Builder_Select(func_get_args());

  }

  /**

  * Create a new [Database_Query_Builder_Select] from an array of columns.

  *

  * // SELECT id, username

  * $query = DB::select_array(array('id', 'username'));

  *

  * @param array columns to select

  * @return Database_Query_Builder_Select

  */

  public static function select_array(array $columns = NULL)

  {

  return new Database_Query_Builder_Select($columns);

  }

  /**

  * Create a new [Database_Query_Builder_Insert].

  *

  * // INSERT INTO users (id, username)

  * $query = DB::insert('users', array('id', 'username'));

  *

  * @param string table to insert into

  * @param array list of column names or array($column, $alias) or object

  * @return Database_Query_Builder_Insert

  */

  public static function insert($table = NULL, array $columns = NULL)

  {

  return new Database_Query_Builder_Insert($table, $columns);

  }

  /**

  * Create a new [Database_Query_Builder_Update].

  *

  * // UPDATE users

  * $query = DB::update('users');

  *

  * @param string table to update

  * @return Database_Query_Builder_Update

  */

  public static function update($table = NULL)

  {

  return new Database_Query_Builder_Update($table);

  }

  /**

  * Create a new [Database_Query_Builder_Delete].

  *

  * // DELETE FROM users

  * $query = DB::delete('users');

  *

  * @param string table to delete from

  * @return Database_Query_Builder_Delete

  */

  public static function delete($table = NULL)

  {

  return new Database_Query_Builder_Delete($table);

  }

  /**

  * Create a new [Database_Expression] which is not escaped. An expression

  * is the only way to use SQL functions within query builders.

  *

  * $expression = DB::expr('COUNT(users.id)');

  *

  * @param string expression

  * @return Database_Expression

  */

  public static function expr($string){

  return new Database_Expression($string);

  }

  /*

  * Gettting paginated page

  */

  public static function getPage($_sql,&$page,$orderBy ='updated desc', $dataPro='data',$pagePro = 'pagination',

  $config = NULL,$db = 'default',$as_object= true){

  $_csql = 'select count(1) as c from ('.$_sql.') st';

  $_c = DB::query(DB::SELECT,$_csql)->execute($db)->get('c');

  if($config){

  $config['total_items'] = $_c;

  $_pagination = new Pagination($config);

  }else{

  $config = array();

  $config['total_items'] = $_c;

  $_pagination = new Pagination($config);

  }

  $_sql .= ' order by '.$orderBy;

  if($_pagination->offset){

  $_sql .= ' offset '.$_pagination->offset;

  }

  $_sql .= ' limit '.$_pagination->items_per_page;

  $_data = DB::query(DB::SELECT,$_sql,$as_object)->execute($db)->as_array();

  if(!$_data){

  $page->{$dataPro} = false;

  $page->{$pagePro} = false;

  return false;

  }

  $page->{$dataPro} = $_data;

  $page->{$pagePro} = $_pagination;

  return true;

  }

  /*

  * Get All roles

  * level to control the statrt

  */

  public static function getRoleTreeSql($role_id,$quote = false,$role_table,$level=0,$db='default'){

  $_sql = 'select id from ('.self::getTree($role_table,true,$role_id,'id','pid','id',

  0, //Maxdepth

  $level, //Level

  ';',$db).') utree';

  if(!$quote) return $_sql;

  else return '('.$_sql.')';

  }

  /*

  * Return sub query on Objects authorization

  * Child role objects and owned objects

  * Parent control

  */

  public static function getCURTreeSql($role_id,$user_id,$role_table,$quote = true,

  $role='role_id',$owner = 'owner_id' ,$db='default'){

  $_sql = ' '.$role.' in '.self::getRoleTreeSql($role_id,true,$role_table,

  1, //Level start with 1

  $db). ' or '.$owner.'='.DB::quote($user_id);

  if(!$quote) return $_sql;

  else return '('.$_sql.')';

  }

  }



Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment résoudre l'erreur de base de données Discuz Comment résoudre l'erreur de base de données Discuz Nov 20, 2023 am 10:10 AM

Les solutions à l'erreur de base de données Discuz sont : 1. Vérifiez la configuration de la base de données ; 2. Assurez-vous que le serveur de base de données est en cours d'exécution ; 3. Vérifiez l'état de la table de base de données ; 5. Videz le cache ; ; 7. Vérifiez les ressources du serveur ; 8. Contactez le support officiel de Discuz. Résoudre les erreurs de base de données Discuz nécessite de commencer par plusieurs aspects, d'étudier progressivement la cause du problème et de prendre les mesures correspondantes pour le réparer.

Une fuite révèle les spécifications clés des Intel Arrow Lake-U, -H, -HX et -S Une fuite révèle les spécifications clés des Intel Arrow Lake-U, -H, -HX et -S Jun 15, 2024 pm 09:49 PM

Intel Arrow Lake devrait être basé sur la même architecture de processeur que Lunar Lake, ce qui signifie que les tout nouveaux cœurs de performance Lion Cove d'Intel seront combinés avec les cœurs d'efficacité économiques Skymont.

Explication détaillée de l'utilisation de return en langage C Explication détaillée de l'utilisation de return en langage C Oct 07, 2023 am 10:58 AM

L'utilisation de return en langage C est la suivante : 1. Pour les fonctions dont le type de valeur de retour est void, vous pouvez utiliser l'instruction return pour terminer l'exécution de la fonction plus tôt. 2. Pour les fonctions dont le type de valeur de retour n'est pas void, la fonction de ; l'instruction return sert à terminer l'exécution de la fonction.Le résultat est renvoyé à l'appelant ;3. Terminer l'exécution de la fonction plus tôt que prévu.À l'intérieur de la fonction, nous pouvons utiliser l'instruction return pour terminer l'exécution de la fonction plus tôt. si la fonction ne renvoie pas de valeur.

Quel est l'ordre d'exécution des instructions return et enfin en Java ? Quel est l'ordre d'exécution des instructions return et enfin en Java ? Apr 25, 2023 pm 07:55 PM

Code source : publicclassReturnFinallyDemo{publicstaticvoidmain(String[]args){System.out.println(case1());}publicstaticintcase1(){intx;try{x=1;returnx;}finally{x=3;}}}# Sortie La sortie du code ci-dessus peut simplement conclure : return est exécuté avant finalement. Jetons un coup d'œil à ce qui se passe au niveau du bytecode. Ce qui suit intercepte une partie du bytecode de la méthode case1 et compare le code source pour annoter la signification de chaque instruction dans

Méthode de traitement asynchrone de la programmation simultanée Select Channels Go à l'aide de Golang Méthode de traitement asynchrone de la programmation simultanée Select Channels Go à l'aide de Golang Sep 28, 2023 pm 05:27 PM

Méthode de traitement asynchrone de la programmation simultanée SelectChannelsGo à l'aide de golang Introduction : La programmation simultanée est un domaine important dans le développement de logiciels modernes, qui peut améliorer efficacement les performances et la réactivité des applications. Dans le langage Go, la programmation simultanée peut être implémentée de manière simple et efficace à l'aide des instructions Channels et Select. Cet article explique comment utiliser Golang pour les méthodes de traitement asynchrone de la programmation simultanée SelectChannelsGo et fournit des informations spécifiques.

Comment masquer l'élément select dans jquery Comment masquer l'élément select dans jquery Aug 15, 2023 pm 01:56 PM

Comment masquer l'élément select dans jquery : 1. méthode hide(), introduisez la bibliothèque jQuery dans la page HTML, vous pouvez utiliser différents sélecteurs pour masquer l'élément select, le sélecteur ID remplace le selectId par l'ID de l'élément select que vous utilisez réellement ; 2. la méthode css(), utilisez le sélecteur d'ID pour sélectionner l'élément de sélection qui doit être masqué, utilisez la méthode css() pour définir l'attribut d'affichage sur aucun et remplacez selectId par l'ID de l'élément de sélection.

Comment réorganiser plusieurs colonnes dans Power Query par glisser-déposer Comment réorganiser plusieurs colonnes dans Power Query par glisser-déposer Mar 14, 2024 am 10:55 AM

Dans cet article, nous allons vous montrer comment réorganiser plusieurs colonnes dans PowerQuery par glisser-déposer. Souvent, lors de l'importation de données provenant de diverses sources, les colonnes peuvent ne pas être dans l'ordre souhaité. La réorganisation des colonnes vous permet non seulement de les organiser dans un ordre logique adapté à vos besoins d'analyse ou de reporting, mais elle améliore également la lisibilité de vos données et accélère les tâches telles que le filtrage, le tri et l'exécution de calculs. Comment réorganiser plusieurs colonnes dans Excel ? Il existe de nombreuses façons de réorganiser les colonnes dans Excel. Vous pouvez simplement sélectionner l'en-tête de colonne et le faire glisser vers l'emplacement souhaité. Cependant, cette approche peut devenir fastidieuse lorsqu’il s’agit de grands tableaux comportant de nombreuses colonnes. Pour réorganiser les colonnes plus efficacement, vous pouvez utiliser l'éditeur de requête amélioré. Améliorer la requête

Comment implémenter la liaison d'événement de changement d'éléments sélectionnés dans jQuery Comment implémenter la liaison d'événement de changement d'éléments sélectionnés dans jQuery Feb 23, 2024 pm 01:12 PM

jQuery est une bibliothèque JavaScript populaire qui peut être utilisée pour simplifier la manipulation du DOM, la gestion des événements, les effets d'animation, etc. Dans le développement Web, nous rencontrons souvent des situations dans lesquelles nous devons modifier la liaison d'événements sur des éléments sélectionnés. Cet article explique comment utiliser jQuery pour lier des événements de modification d'éléments sélectionnés et fournit des exemples de code spécifiques. Tout d'abord, nous devons créer un menu déroulant avec des options utilisant des étiquettes :

See all articles