-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdatabases.html
161 lines (148 loc) · 30.3 KB
/
databases.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Welcome file</title>
<link rel="stylesheet" href="https://stackedit.io/style.css" />
</head>
<body class="stackedit">
<div class="stackedit__left">
<div class="stackedit__toc">
<ul>
<li><a href="#деректер-өңдеушілер">Деректер өңдеушілер</a>
<ul>
<li><a href="#mysql-көмекшісі">MySQL Көмекшісі</a></li>
<li><a href="#pdo-көмекшісі">PDO Көмекшісі</a></li>
<li><a href="#деректер-базасымен-іштірек-құру">Деректер базасымен Іштірек Құру</a></li>
<li><a href="#абстракция-қабаттары">Абстракция Қабаттары</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div class="stackedit__right">
<div class="stackedit__html">
<h1 id="деректер-өңдеушілер">Деректер өңдеушілер</h1>
<p>Өз PHP кодыңыз өте көп рет деректер базасын пайдаланады. Сіздің деректер базасымен байланыс жасау және өздігінен интерактивті болдыру үшін бірнеше мүмкіндіктеріңіз бар. PHP 5.1.0-ге дейін ұсынулған опция — мысалы, <a href="https://www.php.net/mysqli">mysqli</a>, <a href="https://www.php.net/pgsql">pgsql</a>, <a href="https://www.php.net/mssql">mssql</a> — боларды пайдалану.</p>
<p>Егер сіздің өкінішке болары, сіздің бағдарламаңызда тек <em>бір</em> деректер базасын пайдалансаңыз, міне, натив драйверлер маңызды болады. Бірақ мысалы, сіз MySQL және бір көмекші MSSQL пайдаланасыз, немесе Oracle деректер базасына қосылу көрсеткіштері көмекші болса, онда сіз оларды теңдеу мүмкін емесіз. Сізге өзге деректер базасы үшін толығымен жаңа API үйрену қажет болады — және бұл ауыр ауыр болатын мәселе болуы мүмкін.</p>
<h2 id="mysql-көмекшісі">MySQL Көмекшісі</h2>
<p>PHP үшін <a href="https://www.php.net/mysqli">mysql</a> көмекшісі тым өте ескі және үшінші екі көмекшімен ауыстырылды:</p>
<ul>
<li><a href="https://www.php.net/mysqli">mysqli</a></li>
<li><a href="https://www.php.net/pdo">pdo</a></li>
</ul>
<p>Не тек <a href="https://www.php.net/mysqli">mysql</a> дамытуы өте оқшау кездесіпті, бірақ ол <strong><a href="https://www.php.net/manual/migration70.removed-exts-sapis.php">PHP 7.0-да қолдану үшін ресми түсірілді</a></strong>.</p>
<p>Сіздің <code>php.ini</code> параметрлеріңізге кіріспеу үшін кез келген редакторыңызда <code>mysql_*</code> іздеу кезінде, қолданылатын модульді тексеру үшін бір опция — бұл <code>mysql_connect()</code> және <code>mysql_query()</code> сияқты функциялар болса, онда <code>mysql</code> пайдаланылады.</p>
<p>Сіз PHP 7.x неше көп жатқызбасында болмаса да, бұл жаңартуды жаңа ізденген кезде өздігінізді жеткізбеді. Ең жақсы опция — <a href="https://www.php.net/mysqli">mysqli</a> неоғу <a href="https://www.php.net/pdo">PDO</a> көмекшілерімен <code>mysql</code> пайдалануын өз бағдарламаларыңызда жасау, сондай-ақ кейіндіктен тездетілмейміз.</p>
<p><strong>Егер сіз <a href="https://www.php.net/mysqli">mysql</a> көмекшісінен <a href="https://www.php.net/mysqli">mysqli</a> көмекшісіне жаңарту жасасаңыз, тек <code>mysql_*</code> орналастыруы келетіндей сілтеме ұсынатпайтын салмақты жаңарту ұсыныстарына салынғанына ескеріп көйлеу көрсетілетін тамаша жақсы емес. Бұл тек өте қысқарту жаттығу, бірақ <a href="https://www.php.net/pdo">PDO</a> де ұсынылады техникалық артықшылықтардан тарату мүмкіндігін ұмытпайды.</strong></p>
<ul>
<li><a href="https://websitebeaver.com/prepared-statements-in-php-mysqli-to-prevent-sql-injection">MySQLi Дайындалған Деректерді Өңдеу</a></li>
<li><a href="https://www.php.net/mysqlinfo.api.choosing">PHP: MySQL үшін API таңдау</a></li>
</ul>
<h2 id="pdo-көмекшісі">PDO Көмекшісі</h2>
<p><a href="https://www.php.net/pdo">PDO</a> PHP 5.1.0-дан бастап бар бағдарлама байланыс абстракция библиотекасы — бірнеше өте көп деректер базаларымен сөйлесу үшін қолданылатын. Мысалы, сіз MySQL не SQLite-пен байланысу үшін өзіндік кодты пайдалана аласыз:</p>
<pre class=" language-php"><code class="prism language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span>
<span class="token comment">// PDO + MySQL</span>
<span class="token variable">$pdo</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">PDO</span><span class="token punctuation">(</span><span class="token string">'mysql:host=example.com;dbname=database'</span><span class="token punctuation">,</span> <span class="token string">'user'</span><span class="token punctuation">,</span> <span class="token string">'password'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token variable">$statement</span> <span class="token operator">=</span> <span class="token variable">$pdo</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">query</span><span class="token punctuation">(</span><span class="token string">"SELECT some_field FROM some_table"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token variable">$row</span> <span class="token operator">=</span> <span class="token variable">$statement</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">fetch</span><span class="token punctuation">(</span><span class="token constant">PDO</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">FETCH_ASSOC</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">echo</span> <span class="token function">htmlentities</span><span class="token punctuation">(</span><span class="token variable">$row</span><span class="token punctuation">[</span><span class="token string">'some_field'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// PDO + SQLite</span>
<span class="token variable">$pdo</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">PDO</span><span class="token punctuation">(</span><span class="token string">'sqlite:/path/db/foo.sqlite'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token variable">$statement</span> <span class="token operator">=</span> <span class="token variable">$pdo</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">query</span><span class="token punctuation">(</span><span class="token string">"SELECT some_field FROM some_table"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token variable">$row</span> <span class="token operator">=</span> <span class="token variable">$statement</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">fetch</span><span class="token punctuation">(</span><span class="token constant">PDO</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">FETCH_ASSOC</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">echo</span> <span class="token function">htmlentities</span><span class="token punctuation">(</span><span class="token variable">$row</span><span class="token punctuation">[</span><span class="token string">'some_field'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</span></code></pre>
<p>PDO сіздің SQL сұрауларыңын немесе өткізіп тұрмайтын қажеттіліктерін түсіндірмейді; бұл тек өзге деректер базаларымен байланысу үшін ортақ интерфейс береді.</p>
<p>Онда біреу, <code>PDO</code> сізге SQL инъекция атакаларынан тым аурулармен сақтау мүмкіндігін береді. Мысалы, иностанны input (мысалы, ID) өз SQL сұрауларыңызға сәтті жасау үшін PDO клаузалары мен байланыстарды пайдалануға мүмкіндік береді.</p>
<p>PHP скрипті санаймыз, сізге саны ID дайындалмалы параметр ретінде келеді. Бұл ID-ны деректер базасынан пайдаланушы еңгізу үшін пайдалану қажет. Бұл <code>кедей</code> жол:</p>
<pre class=" language-php"><code class="prism language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span>
<span class="token variable">$pdo</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">PDO</span><span class="token punctuation">(</span><span class="token string">'sqlite:/path/db/users.db'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token variable">$pdo</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">query</span><span class="token punctuation">(</span><span class="token string">"SELECT name FROM users WHERE id = "</span> <span class="token punctuation">.</span> <span class="token variable">$_GET</span><span class="token punctuation">[</span><span class="token string">'id'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// <-- ЖАРАМСЫЗ ЕМЕС!</span>
</span></code></pre>
<p>Бұл жаман код. Сіз SQL сұрау параметрін жоқтау SQL сұрауына енгізіп отырап жатарды, аймақ жасау үшін <a href="https://web.archive.org/web/20210413233627/http://wiki.hashphp.org/Validation">SQL Инъекция</a> деп аталатын іске қосу практикасын пайдалану арқылы. Мысалы, қауіпсіздік куршаушы көмекші параметрімен <code>http://domain.com/?id=1%3BDELETE+FROM+users</code> деп URL-ді шақыру кезінде <code>$_GET['id']</code> переменді <code>1;DELETE FROM users</code> деп орнататын болса, бұл өзгеріске кететін барлық пайдаланушыларды жоюды алдайды! Себебі, сіз PDO клаузаларын пайдалана отырып, ID енгізініштерін өтініштерімен тазарту керек.</p>
<pre class=" language-php"><code class="prism language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span>
<span class="token variable">$pdo</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">PDO</span><span class="token punctuation">(</span><span class="token string">'sqlite:/path/db/users.db'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token variable">$stmt</span> <span class="token operator">=</span> <span class="token variable">$pdo</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">prepare</span><span class="token punctuation">(</span><span class="token string">'SELECT name FROM users WHERE id = :id'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token variable">$id</span> <span class="token operator">=</span> <span class="token function">filter_input</span><span class="token punctuation">(</span><span class="token constant">INPUT_GET</span><span class="token punctuation">,</span> <span class="token string">'id'</span><span class="token punctuation">,</span> <span class="token constant">FILTER_SANITIZE_NUMBER_INT</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// <-- деректеріңізді біріншіден тазартыңыз (көмекші: [Деректерді Тазалау](#data_filtering)), мағаны INSERT, UPDATE жатсаулары үшін аса маңызды.</span>
<span class="token variable">$stmt</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">bindParam</span><span class="token punctuation">(</span><span class="token string">':id'</span><span class="token punctuation">,</span> <span class="token variable">$id</span><span class="token punctuation">,</span> <span class="token constant">PDO</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">PARAM_INT</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// <-- PDO арқылы SQL үшін автоматты тазаланады</span>
<span class="token variable">$stmt</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">execute</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</span></code></pre>
<p>Бұл дұрыс код. Бұл PDO клаузасында байланысталған параметрді қолданады. Бұл иностанны input (мысалы, ID) деректер базасына енгізілгеннен бұрын тазалайды, потенциалды SQL инъекция атакаларын алтынан шақырады.</p>
<p>INSERT немесе UPDATE сияқты жазулар үшін деректерді тазалау ( <a href="https://phptherightway.com/#data_filtering">деректерді тазалау туралы мақала</a> ) тым маңызды, және басқалар үшін оны тазалау (HTML тегтерін аластату, JavaScript жою үшін тазалау) түсіндірілген. PDO тек оны SQL үшін тазалар, сіздің қолданушы интерфейсі үшін емес.</p>
<ul>
<li><a href="https://www.php.net/pdo">PDO үйрену</a></li>
</ul>
<p>Сіздің білетініз келсе, деректер базасы байланыстары ресурстарды қолданады, және агымдағы кезде соңы болмаса, өзге тілдерде тегін жабылар болуы туралы еш өзіге сыйлықсыз болмақты білу керек. PDO пайдалану арқылы сіз объектіні жоя отырып барлық әлеуеттерін жойғанда байланысты алып тастай аласыз, міне, оны NULL-ге орнату арқылы. Бұны белгісіз болмасаңыз, PHP скрипті бітетінде байланысты автоматты түрде жабады - басқа даусыз жасау келсе, мәселен, сіз қолдану үшін жаттығу байланыстарды пайдалануды сақтайсыз боларсыз.</p>
<ul>
<li><a href="https://www.php.net/pdo.connections">PDO байланыстар туралы білу</a></li>
</ul>
<h2 id="деректер-базасымен-іштірек-құру">Деректер базасымен Іштірек Құру</h2>
<p>Дайында PHP үйренуге бастайтын уақытта, дамытуды жасаушылар көбінесе, олардың деректер базасымен іштірек құрауын, кодты көрсеткін болады:</p>
<pre class=" language-php"><code class="prism language-php"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>ul</span><span class="token punctuation">></span></span>
<span class="token php language-php"><span class="token delimiter important"><?php</span>
<span class="token keyword">foreach</span> <span class="token punctuation">(</span><span class="token variable">$db</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">query</span><span class="token punctuation">(</span><span class="token string">'SELECT * FROM table'</span><span class="token punctuation">)</span> <span class="token keyword">as</span> <span class="token variable">$row</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">echo</span> <span class="token string">"<li>"</span><span class="token punctuation">.</span><span class="token variable">$row</span><span class="token punctuation">[</span><span class="token string">'field1'</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token string">" - "</span><span class="token punctuation">.</span><span class="token variable">$row</span><span class="token punctuation">[</span><span class="token string">'field2'</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token string">"</li>"</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token delimiter important">?></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>ul</span><span class="token punctuation">></span></span>
</code></pre>
<p>Бұл көмекші көптеген себептерге байланысты жаман практика, основалы олар - бұл өте қиын болар, тестілеу үшін қиын, оқуы үшін қиын, деректерді өзгерту үшін үстіне шектеу көрсету мүмкіндігі жоқ жатамдықтарды жасау себептерінен болмауы мүмкін. Басқа ешқандай шектеу көрсетпесеңіз, көптеген кескіндіктерді көрсетуіне қатысты көп өріс әкесіз кетеді.</p>
<p>Бұл істеулерді орындау үшін басқа шешімдер де бар - <a href="https://phptherightway.com/#object-oriented-programming">ООП</a> немесе <a href="https://phptherightway.com/#functional-programming">функционалды жасау</a> мүмкін болатын болатын болады, бірақ белгілі бөлік көрсетілуі керек.</p>
<p>Ең нысанды қарап тұрыпыңыз:</p>
<pre class=" language-php"><code class="prism language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span>
<span class="token keyword">function</span> <span class="token function">getAllFoos</span><span class="token punctuation">(</span><span class="token variable">$db</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">return</span> <span class="token variable">$db</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">query</span><span class="token punctuation">(</span><span class="token string">'SELECT * FROM table'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token variable">$results</span> <span class="token operator">=</span> <span class="token function">getAllFoos</span><span class="token punctuation">(</span><span class="token variable">$db</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">foreach</span> <span class="token punctuation">(</span><span class="token variable">$results</span> <span class="token keyword">as</span> <span class="token variable">$row</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">echo</span> <span class="token string">"<li>"</span><span class="token punctuation">.</span><span class="token variable">$row</span><span class="token punctuation">[</span><span class="token string">'field1'</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token string">" - "</span><span class="token punctuation">.</span><span class="token variable">$row</span><span class="token punctuation">[</span><span class="token string">'field2'</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token string">"</li>"</span><span class="token punctuation">;</span> <span class="token comment">// ЖАРАМСЫЗ!!</span>
<span class="token punctuation">}</span>
</span></code></pre>
<p>Бұл жақсы бастау. Осы екі элементті орнына келісімізді орналастырып, сіздің байланыс ортаңызды тазартып аласыз.</p>
<p><strong>foo.php</strong></p>
<pre class=" language-php"><code class="prism language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span>
<span class="token variable">$db</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">PDO</span><span class="token punctuation">(</span><span class="token string">'mysql:host=localhost;dbname=testdb;charset=utf8mb4'</span><span class="token punctuation">,</span> <span class="token string">'username'</span><span class="token punctuation">,</span> <span class="token string">'password'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// Модельді қолданып алу үшін</span>
<span class="token keyword">include</span> <span class="token string">'models/FooModel.php'</span><span class="token punctuation">;</span>
<span class="token comment">// Нысаны құру</span>
<span class="token variable">$fooModel</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FooModel</span><span class="token punctuation">(</span><span class="token variable">$db</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// Foo-лардың тізімін алу</span>
<span class="token variable">$fooList</span> <span class="token operator">=</span> <span class="token variable">$fooModel</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">getAllFoos</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// Көрсету</span>
<span class="token keyword">include</span> <span class="token string">'views/foo-list.php'</span><span class="token punctuation">;</span>
</span></code></pre>
<p><strong>models/FooModel.php</strong></p>
<pre class=" language-php"><code class="prism language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span>
<span class="token keyword">class</span> <span class="token class-name">FooModel</span>
<span class="token punctuation">{</span>
<span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">__construct</span><span class="token punctuation">(</span><span class="token keyword">protected</span> <span class="token constant">PDO</span> <span class="token variable">$db</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
<span class="token punctuation">}</span>
<span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">getAllFoos</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">return</span> <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">></span><span class="token property">db</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">query</span><span class="token punctuation">(</span><span class="token string">'SELECT * FROM table'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</span></code></pre>
<p><strong>views/foo-list.php</strong></p>
<pre class=" language-php"><code class="prism language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">foreach</span> <span class="token punctuation">(</span><span class="token variable">$fooList</span> <span class="token keyword">as</span> <span class="token variable">$row</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token delimiter important">?></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>li</span><span class="token punctuation">></span></span><span class="token php language-php"><span class="token delimiter important"><?=</span> <span class="token variable">$row</span><span class="token punctuation">[</span><span class="token string">'field1'</span><span class="token punctuation">]</span> <span class="token delimiter important">?></span></span> - <span class="token php language-php"><span class="token delimiter important"><?=</span> <span class="token variable">$row</span><span class="token punctuation">[</span><span class="token string">'field2'</span><span class="token punctuation">]</span> <span class="token delimiter important">?></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>li</span><span class="token punctuation">></span></span>
<span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">endforeach</span> <span class="token delimiter important">?></span></span>
</code></pre>
<p>Бұл аса тұрау жасаушылардың көбі өзгергеніне сияқты, тек біраз көмекшілігі көбейгі. Сіз өмірінде барлық жаттамаларды орналау қажет емес, бірақ көбінеуліктік дайындық жасау және деректер базасымен іштірек құрау алдамашы болмаса, өз өлшемізге емес болады. Егер әр турлы бастамаларды біріктіріп жаттамаларды жасау қажет болса, бұл мүмкіндік көбінесеу қатесі болуы мүмкін. Егер сіз өмірінде араларды таратуды қайта тексергіңіз келсе, сіздің <a href="https://phptherightway.com/#unit-testing">бірлесетін тесттеу</a> көмекшісі болады.</p>
<h2 id="абстракция-қабаттары">Абстракция Қабаттары</h2>
<p>Көптеген фреймворктар <a href="https://www.php.net/book.pdo">PDO</a> үстіне орнатылған немесе орнатылмауы мүмкін болатын өзінің абстракция қабатын ұсынайды. Олар өзінде <a href="https://www.php.net/book.pdo">PDO</a> туралы терімдігі айырым абстракция беру жаттықтыруын ұсынату үшін PHP әдістерінде сұрауларыңызды биіктейді, бірақ егер сіз MySQL, PostgreSQL және SQLite мен тесікке жұмыс жасау кезінде, бұл аз көбірек келуі мүмкін болар.</p>
<p>Кейбір абстракция қабаттары <a href="https://www.php-fig.org/psr/psr-0/">PSR-0</a> немесе <a href="https://www.php-fig.org/psr/psr-4/">PSR-4</a> пространство аты стандарттарын қолданарлықтағы орындалатылады, сондай-ақ сізге қажет болатын барлық бағдарламаға орнатуға болады:</p>
<ul>
<li><a href="https://atlasphp.io/">Atlas</a></li>
<li><a href="https://github.com/auraphp/Aura.Sql">Aura SQL</a></li>
<li><a href="https://www.doctrine-project.org/projects/dbal.html">Doctrine2 DBAL</a></li>
<li><a href="https://medoo.in/">Medoo</a></li>
<li><a href="https://propelorm.org/">Propel</a></li>
<li><a href="https://docs.laminas.dev/laminas-db/">laminas-db</a></li>
</ul>
</div>
</div>
</body>
</html>