-
Notifications
You must be signed in to change notification settings - Fork 25
Expand file tree
/
Copy pathconnections.xml
More file actions
165 lines (161 loc) · 6.05 KB
/
connections.xml
File metadata and controls
165 lines (161 loc) · 6.05 KB
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
162
163
164
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: d861a1bcea24f05e52e4938c1ecdf9d70326d7aa Maintainer: nilgun Status: ready -->
<chapter xml:id="pdo.connections" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Bağlantılar ve Bağlantı Yönetimi</title>
<para>
Bağlantılar temel PDO sınıfının örneklenmesiyle kurulur. Hangi sürücünün
kullanılacağının bir önemi yoktur; daima PDO sınıf isminin kullanılması gerekir.
Veritabanı kaynağı (diğer bir deyişle DSN) ve isteğe bağlı olarak kullanıcı
ismi ve parolası belirtmek için kurucu kullanılabilir.
</para>
<para>
<example>
<title>- MySQL'e bağlanma</title>
<programlisting role="php">
<![CDATA[
<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
?>
]]>
</programlisting>
</example>
</para>
<para>
Bir hata oluşursa bu bir <classname>PDOException</classname> istisnasına
sebep olur. Hatayı ele almak için istisna yakalanabilir veya işlem
<function>set_exception_handler</function> üzerinden ayarlanmış bir
küresel hata işleme uygulamasına bırakılabilir.
</para>
<para>
<example><title>- Bağlantı hatalarının ele alınışı</title>
<programlisting role="php">
<![CDATA[
<?php
try {
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
} catch (PDOException $e) {
// örneğin zaman aşımını bekledikten sonra yediden bağlanmaya çalış
}
?>
]]>
</programlisting>
</example>
</para>
<warning>
<para>
Tıpkı diğer herhangi bir <link linkend="language.exceptions">istisna</link>
gibi, <classname>PDOException</classname> da bir &catch; deyimi aracılığıyla
açıkça veya <function>set_exception_handler</function> aracılığıyla dolaylı
olarak yakalanabilir. Aksi takdirde varsayılan olarak, yakalanmamış bir
istisnayı <constant>E_FATAL_ERROR</constant> ölümcül hatasına dönüştürme
davranışı gerçekleşir. Ölümcül hata, bağlantı ayrıntılarını sızdırabilecek
bir geri izleme içerecektir. Bu nedenle, bir üretim sunucusunda &php.ini;
<link linkend="ini.display-errors"><literal>display_errors</literal></link>
seçeneğine <literal>0</literal> atanmalıdır.
</para>
</warning>
<para>
Veritabanı bağlantısının başarıyla kurulmasıyla betiğinize PDO sınıfının bir
örneği döner. PDO nesnesinin ömrü boyunca bağlantı etkin kalır. Bağlantıyı
kapatmak için, nesneye gönderimli herşeyin silindiğinden emin olarak nesneyi
yok etmek gerekir; nesneyi tutan değişkene &null; atanarak bu yapılabilir.
Bu yapılmazsa, PHP betiği sonlandığında nesne kendiliğinden yok edilir.
</para>
<note>
<simpara>
Bu PDO örneğine hala başka gönderimler varsa (örneğin bir PDOStatement
örneğinden veya aynı PDO örneğine gönderimli diğer değişkenlerden),
bunların da kaldırılması gerekir (örneğin, PDOStatement'a başvuran
değişkene &null; atanarak).
</simpara>
</note>
<para>
<example>
<title>- Bir bağlantının kapatılışı</title>
<programlisting role="php">
<![CDATA[
<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
// burada bağlantıyı kullanıyoruz
$sth = $dbh->query('SELECT * FROM foo');
// İşimiz bittiğine göre bağlantıyı kapatabiliriz.
$sth = null;
$dbh = null;
?>
]]>
</programlisting>
</example>
</para>
<para>
Çoğu HTTP uygulaması veritabanı sunucularına kalıcı bağlantılardan medet
umar. Kalıcı bağlantılar betiğin işi bittiğinde kapatılmaz, önbelleğe alınıp
aynı kimlik kanıtlarıyla bağlantı kurmak isteyen başka betiklerce
kullanılır. Kalıcı bağlantı önbelleği, bir betiğin bir veritabanı ile her
iletişime geçme isteğinde yeni bir bağlantı kurma maliyetini ortadan
kaldırır ve uygulamanın daha hızlı çalışmasını sağlar.
</para>
<para>
<example>
<title>- Kalıcı bağlantılar</title>
<programlisting role="php">
<![CDATA[
<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
PDO::ATTR_PERSISTENT => true
));
?>
]]>
</programlisting>
</example>
</para>
<para>
<constant>PDO::ATTR_PERSISTENT</constant> seçeneğinin değeri, sayısal
olmayan bir dizge olmadığı sürece &boolean;'a (kalıcı bağlantıları
etkinleştir/devre dışı bırak) dönüştürülür, bu durumda çok sayıda kalıcı
bağlantı havuzunun kullanımına izin verilir. Bu, farklı bağlantılar uyumsuz
ayarlar kullanıyorsa, örneğin farklı
<constant>PDO::MYSQL_ATTR_USE_BUFFERED_QUERY</constant> değerleri
kullanılıyorsa yararlıdır.
</para>
<note>
<para>
Kalıcı bağlantı kullanmak için PDO kurucusuna aktarılan sürücü seçenekleri
dizisinde <constant>PDO::ATTR_PERSISTENT</constant> sabitine &true;
atanmalıdır. Nesne ilklendirildikten sonra bu özelliğin
<methodname>PDO::setAttribute</methodname> ile etkin kılınması
istenirse sürücü kalıcı bağlantıları kullanmayacaktır.
</para>
</note>
<note>
<para>
PDO ODBC sürücüsü kullanılıyorsa ve ODBC kütüphaneleri ODBC Bağlantı
Havuzlarını destekliyorsa (hem unixODBC hem de Windows bunu yapar;
başkaları da olabilir) kalıcı PDO bağlantılarının kullanılması önerilmez;
bağlantı önbelleklemesini ODBC Bağlantı Havuzlama katmanına bırakmak daha
iyidir. ODBC Bağlantı Havuzu bağlantıyı süreçteki diğer modüllerle
paylaşır; eğer PDO bağlantıyı önbelleklemeye çalışırsa bu bağlantı asla
ODBC bağlantı havuzuna dönmez ve sonuçta diğer modüllere hizmet vermek için
ek bağlantılar oluşur.
</para>
</note>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->