Home >Database >Mysql Tutorial >How to write your own database package (1)
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
$a = Actor::select('first_name', 'last_name') ->where('first_name', 'NICK') ->where('last_name', 'WAHLBERG') ->first() var_dump($a);Return format
object(Actor)[11] public 'first_name' => string 'NICK' (length=4) public 'last_name' => string 'WAHLBERG' (length=8)The returned data is still operable (up
$a->update(...); $a->delete();Common database connection writing methodsEveryone who has a certain understanding of php knows that compared with the eliminated
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()); }The above example is very concise. When a project gradually When it grows and becomes more complex, we need an encapsulation class to reduce the duplication of code, just like some auxiliary
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出现在这一行,所以查看上一行的逻辑与数据 ***/die(var_dump()) has a slightly higher usage rate, so I wrote them as an auxiliary function.
function dd($var) { die(var_dump($var)); }For the same reason, when reading the database, the appearance rate of select is extremely high, so simply wrap it up
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(); }Example
select($pdo, 'actor', '*', ['first_name'=>'PENELOPE']) /** * 生成sql query => select * from actor where first_name = 'PENELOPE' **/To summarize, database encapsulation is simple The description is to bring parameters into the auxiliary function and let it automatically generate SQL commands. Database encapsulated
.php - Entry file, responsible for setting up the table, accepting the request, and returning the response
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!