How to write your own database package (1)
Write it at the front
I am still a rookie, please point out any mistakes by lightly commenting
Due to shallow work experience, database connection cannot be fully covered. More complex queries may have unexpected bugs
Therefore, this series only provides ideas, which are mature and stable. Please search for the database encapsulation by yourself
- ##The original intention of writing this series is to inspire others. At the back end of each section, I will ask some personal questions (or not ), I hope it can lead to some masters to answer my questions
- The PHP version used is 7.0+. This series is not backward compatible. Children who are still in version 5.6, please come and play.
- The database encapsulation refers to the source code of laravel. If there is any similarity, it is not a coincidence
$a = Actor::select('first_name', 'last_name') ->where('first_name', 'NICK') ->where('last_name', 'WAHLBERG') ->first() var_dump($a);
object(Actor)[11] public 'first_name' => string 'NICK' (length=4) public 'last_name' => string 'WAHLBERG' (length=8)
$a->update(...); $a->delete();
mysql or the replaced mysqli , pdo can avoid SQL injection attacks, is more safe, and is object-oriented, so the following uses pdo as an example
<?php $driver='mysql'; //数据库类型 $host='localhost'; //数据库主机名 $db = 'sakila'; //数据库名称 $username='root'; //数据库连接用户名 $password=''; //数据库密码 $dsn="$driver:host=$host;dbname=$db"; try { $pdo= new PDO($dsn, $username, $password); //初始化一个PDO对象 $sql = "select * from actor"; $res = $pdo->query($sql); // 从actor中获取所有数据 foreach($res as $row) echo $row['first_name']."<br>"; } catch (PDOException $e) { die($e->getMessage()); }
functions that we usually write by ourselves, but the encapsulation class is just a little more advanced.
Basic ideaSo, how should we write it?First of all, when we need to simplify some code, we usually write some auxiliary functions by ourselves. For example, I personally have a bad habit and don’t like to use the
debugging function of the editor ( Voice-over: I use sublime text 3), so when debugging, I write it like this at the beginning.
$a = "is bug"; die(var_dump($a)); // 输出变量并且停止运行之后的代码 /***从xdebug得知bug出现在这一行,所以查看上一行的逻辑与数据 ***/
function dd($var) { die(var_dump($var)); }
function select($pdo, $table, $require, $where = []) { $w = []; // 将搜索条件转化为数据库命令能接受的格式 foreach ($where as $key => &$val) $w[] = "$key = '$val'"; // 有时候并不需要条件,仅仅将所有数据取出,因此$where默认为空 if(!empty($w)) $w = "where ".implode(', ', $w); else $w = ""; // 生成sql query $sql = "select $require from $table $w"; // 将已生成的query带入pdo实例 $res = $pdo->query($sql); // 返回结果 return $res->fetchAll(); }
select($pdo, 'actor', '*', ['first_name'=>'PENELOPE']) /** * 生成sql query => select * from actor where first_name = 'PENELOPE' **/
architecture
is mainly divided into four files- ##Connector.php - responsible for communication with the database, request And return the database data
- Model
.php - Entry file, responsible for setting up the table, accepting the request, and returning the response
Grammar.php - Converts requests stored by Builder into SQL statements - Builder.php - Core file, stores requests for Model, calls Grammar to return SQL The statement is sent to the Connector together with the parameter variables to obtain the database data, and then returned to the Model
- The architecture may not be explained well, but it doesn’t matter. I will slowly explain it one by one next. In-depth explanation
It’s roughly like this. If you can, give it a like or discuss it in the comment area below. Only feedback can push a lazy cancer patient to move forward.
The above is the detailed content of How to write your own database package (1). For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



Full table scanning may be faster in MySQL than using indexes. Specific cases include: 1) the data volume is small; 2) when the query returns a large amount of data; 3) when the index column is not highly selective; 4) when the complex query. By analyzing query plans, optimizing indexes, avoiding over-index and regularly maintaining tables, you can make the best choices in practical applications.

Yes, MySQL can be installed on Windows 7, and although Microsoft has stopped supporting Windows 7, MySQL is still compatible with it. However, the following points should be noted during the installation process: Download the MySQL installer for Windows. Select the appropriate version of MySQL (community or enterprise). Select the appropriate installation directory and character set during the installation process. Set the root user password and keep it properly. Connect to the database for testing. Note the compatibility and security issues on Windows 7, and it is recommended to upgrade to a supported operating system.

InnoDB's full-text search capabilities are very powerful, which can significantly improve database query efficiency and ability to process large amounts of text data. 1) InnoDB implements full-text search through inverted indexing, supporting basic and advanced search queries. 2) Use MATCH and AGAINST keywords to search, support Boolean mode and phrase search. 3) Optimization methods include using word segmentation technology, periodic rebuilding of indexes and adjusting cache size to improve performance and accuracy.

The difference between clustered index and non-clustered index is: 1. Clustered index stores data rows in the index structure, which is suitable for querying by primary key and range. 2. The non-clustered index stores index key values and pointers to data rows, and is suitable for non-primary key column queries.

Article discusses popular MySQL GUI tools like MySQL Workbench and phpMyAdmin, comparing their features and suitability for beginners and advanced users.[159 characters]

Article discusses strategies for handling large datasets in MySQL, including partitioning, sharding, indexing, and query optimization.

MySQL is an open source relational database management system. 1) Create database and tables: Use the CREATEDATABASE and CREATETABLE commands. 2) Basic operations: INSERT, UPDATE, DELETE and SELECT. 3) Advanced operations: JOIN, subquery and transaction processing. 4) Debugging skills: Check syntax, data type and permissions. 5) Optimization suggestions: Use indexes, avoid SELECT* and use transactions.

In MySQL database, the relationship between the user and the database is defined by permissions and tables. The user has a username and password to access the database. Permissions are granted through the GRANT command, while the table is created by the CREATE TABLE command. To establish a relationship between a user and a database, you need to create a database, create a user, and then grant permissions.
