Центральной точкой входа в X DevAPI является функция mysql_xdevapi\getSession(), которая получает URI на сервер MySQL 8.0 и возвращает объект mysql_xdevap\Session.
Пример #1 Подключение к серверу MySQL
<?php
try {
$session = mysql_xdevapi\getSession("mysqlx://user:password@host");
} catch(Exception $e) {
die("Не удалось установить соединение: " . $e->getMessage());
}
// ... используйте $session
?>
Сессия обеспечивает полный доступ к API. Для новой установки сервера MySQL первым шагом является создание схемы базы данных с коллекцией для хранения данных:
Пример #2 Создание схемы и коллекции на сервере MySQL
<?php
$schema = $session->createSchema("test");
$collection = $schema->createCollection("example");
?>
При хранении данных, как правило, json_encode() используется для кодирования данных в JSON, который затем может храниться в коллекции.
В следующем примере данные сохраняются в коллекции, которую мы создали ранее, а затем снова извлекаем их части.
Пример #3 Хранение и получение данных
<?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());
?>
Результатом выполнения данного примера будет что-то подобное:
array(4) { ["_id"]=> string(28) "00005ad66aaf0000000000000003" ["age"]=> int(39) ["job"]=> string(7) "Manager" ["name"]=> string(4) "Mike" }
Пример демонстрирует, что сервер MySQL добавляет дополнительное поле с именем
_id
, которое служит первичным ключом к документу.
В примере также показано, что извлеченные данные сортируются в алфавитном порядке. Этот конкретный порядок исходит из эффективного двоичного хранилища внутри сервера MySQL, но на него не следует полагаться. За подробностями обращайтесь к документации по типу данных MySQL JSON.
При желании можно использовать итераторы PHP для извлечения нескольких документов:
Пример #4 Извлечение и итерация нескольких документов
<?php
$result = $collection->find()->execute();
foreach ($result as $doc) {
echo "${doc["name"]} is a ${doc["job"]}.\n";
}
?>
Результатом выполнения данного примера будет что-то подобное:
Marco is a Programmer. Mike is a Manager.