-
Notifications
You must be signed in to change notification settings - Fork 76
/
Copy pathexamples.xml
151 lines (139 loc) · 4.49 KB
/
examples.xml
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
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 8deee9585d9c8485493e35bcb7dde61b29c30854 Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<chapter xml:id="mysql-xdevapi.examples" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
&reftitle.examples;
<para>
Центральная точка входа в X DevAPI — функция <function>mysql_xdevapi\getSession</function>,
которая принимает URI сервера MySQL 8.0 и возвращает
объект <classname>mysql_xdevapi\Session</classname>.
</para>
<example>
<title>Подключение к серверу MySQL</title>
<programlisting role="php">
<![CDATA[
<?php
try {
$session = mysql_xdevapi\getSession("mysqlx://user:password@host");
} catch(Exception $e) {
die("Не удалось установить соединение: " . $e->getMessage());
}
// ...используйте $session
?>
]]>
</programlisting>
</example>
<para>
Сессия даёт полный доступ к API. Первый шаг для новой установки MySQL-сервера —
создать схему базы данных с коллекцией для хранения данных:
</para>
<example>
<title>Создание схемы и коллекции на сервере MySQL</title>
<programlisting role="php">
<![CDATA[
<?php
$schema = $session->createSchema("test");
$collection = $schema->createCollection("example");
?>
]]>
</programlisting>
</example>
<para>
При сохранении данных их обычно кодируют в JSON-формат функцией <function>json_encode</function>,
который затем можно сохранить внутри коллекции.
</para>
<para>
В следующем примере данные сохраняются в коллекции, которую мы создали ранее,
а затем снова извлекаем их части.
</para>
<example>
<title>Хранение и получение данных</title>
<programlisting role="php">
<![CDATA[
<?php
$marco = [
"name" => "Marco",
"age" => 19,
"job" => "Programmer"
];
$mike = [
"name" => "Mike",
"age" => 39,
"job" => "Manager"
];
$schema = $session->getSchema("test");
$collection = $schema->getCollection("example");
$collection->add($marco, $mike)->execute();
var_dump($collection->find("name = 'Mike'")->execute()->fetchOne());
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
array(4) {
["_id"]=>
string(28) "00005ad66aaf0000000000000003"
["age"]=>
int(39)
["job"]=>
string(7) "Manager"
["name"]=>
string(4) "Mike"
}
]]>
</screen>
</example>
<para>
В примере показано, что сервер MySQL добавляет поле с именем
<code>_id</code>, которое выступает в роли первичного ключа к документу.
</para>
<para>
В примере также показано, что извлечённые данные отсортированы по алфавиту.
Этот конкретный порядок обоснован эффективным двоичным хранилищем внутри сервера MySQL, но
на него не нужно полагаться. Подробнее об этом рассказано в документации по типу данных MySQL JSON.
</para>
<para>
Если нужно, можно использовать итераторы PHP для извлечения нескольких документов:
</para>
<example>
<title>Извлечение и итерация нескольких документов</title>
<programlisting role="php">
<![CDATA[
<?php
$result = $collection->find()->execute();
foreach ($result as $doc) {
echo "{$doc["name"]} — {$doc["job"]}.\n";
}
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
Марко — программист.
Майк — менеджер.
]]>
</screen>
</example>
</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
-->