1
0
mirror of https://github.com/php/doc-ja.git synced 2026-03-23 22:52:11 +01:00

mysqlinfo : fix XML by converting para to simpara tags via script

This commit is contained in:
Gina Peter Banyard
2026-01-19 03:27:51 +00:00
parent bc2e6ac9dc
commit 814f753ee5
2 changed files with 86 additions and 86 deletions

View File

@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 968c2bc60de3e93d7f38be0b9d2d1b9685a16ea7 Maintainer: takagi Status: ready -->
<!-- EN-Revision: 7cff4d34f0324c9de72d15957e1b62e20f37dfaf Maintainer: takagi Status: ready -->
<!-- Credits: mumumu -->
<chapter xml:id="mysqlinfo.concepts" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="mysqlinfo.concepts">
<title>コンセプト</title>
<para>
<simpara>
ここで説明する内容は、PHP 用の MySQL ドライバに固有の内容です。
</para>
</simpara>
<section xml:id="mysqlinfo.concepts.buffering">
<title>バッファクエリと非バッファクエリ</title>
<para>
<simpara>
クエリは、デフォルトではバッファモードで実行されます。
つまり、クエリの結果がすぐに MySQL サーバーから PHP に転送され、
PHP プロセスのメモリ内に結果を保持し続けるということです。
@@ -24,17 +24,17 @@
(リクエストを終了すると、自動的に解放されます) まではメモリ上に残り続けます。
バッファモードは「結果を格納する」クエリとも呼ばれます。
ここでは、結果セット全体が一度に格納されます。
</para>
</simpara>
<note>
<para>
<simpara>
ライブラリとして libmysqlclient を使っている場合は、結果セットのデータを
PHP の変数に代入するまで結果セットのメモリ利用量が PHP のメモリ制限にカウントされません。
mysqlnd の場合は、結果セットのメモリがすべて PHP のメモリ制限にもカウントされます。
</para>
</simpara>
</note>
<para>
<simpara>
非バッファクエリは、クエリを実行してMySQLサーバーからデータを取得するのを待ちます。
PHP 側でのメモリ消費が少なくなりますが、サーバーへの負荷は高くなります。
サーバー上の結果セットからすべての結果を取得するまで、
@@ -42,9 +42,9 @@
非バッファクエリは「結果を使う」クエリとも呼ばれます。
結果セットから全ての行が取得されると、
結果セットは削除されるので再度ループさせることはできません。
</para>
</simpara>
<para>
<simpara>
こういった特性を考慮すると、非バッファクエリを使うのは、
結果セットの量が巨大な場合や、順番に結果を処理する場合だけに留めるべきでしょう。
非バッファクエリには、たくさんの落とし穴があり、
@@ -52,19 +52,19 @@
たとえば、結果セットの行数が最後の行を取得するまで不明な点が挙げられます。
バッファクエリは使い方が簡単で、
結果セットをより柔軟に処理できます。
</para>
</simpara>
<!-- @TODO
- Add list of issues people run into with unbuffered queries
- Add list of specific use cases for when unbuffered queries are useful
- Question: Unbuffered queries still require all rows to be returned or resource free before executing another? Applies to all extensions?
- Show "free_result" functions / unset usage with buffered queries 8double-check with Andrey on mysqlnd optimizations
-->
<para>
<simpara>
デフォルトはバッファモードなので、以下の例では
それぞれの API で非バッファクエリを実行する方法を示します。
</para>
</simpara>
<example>
<title>非バッファクエリの例: mysqli</title>
@@ -103,16 +103,16 @@ foreach ($unbufferedResult as $row) {
<section xml:id="mysqlinfo.concepts.charset">
<title>文字セット</title>
<para>
<simpara>
適切な文字セットをサーバーレベルで設定しておくのが理想であり、MySQL のマニュアルの
<link xlink:href="&url.mysql.charsets.config;">Character Set Configuration</link>
にもそうするよう書かれています。
しかしそれ以外にも、各 MySQL API には実行時に文字セットを指定する方法が用意されています。
</para>
</simpara>
<caution>
<title>文字セットと文字のエスケープ</title>
<para>
<simpara>
文字セットはきちんと理解して設定しておかないといけません。
すべての操作に影響が及び、セキュリティの問題を引き起こす可能性があるからです。
たとえば、文字列のエスケープ
@@ -121,7 +121,7 @@ foreach ($unbufferedResult as $row) {
は文字セットの設定に従った動きをします。
これらの関数は、クエリで設定した文字セットは使わないことを知っておくことが大切です。
たとえば次の例のような設定をしても、エスケープ機能は正しく動きません。
</para>
</simpara>
</caution>
<example>
@@ -148,18 +148,18 @@ $mysqli->set_charset('UTF-8');
</programlisting>
</example>
<para>
<simpara>
実行時に文字セットを変更する適切な方法を、各 API について示します。
</para>
</simpara>
<note>
<title>UTF-8 でありがちなミス</title>
<para>
<simpara>
MySQL の文字セット名はハイフンを含まないので、MySQL で
(3バイト以下の UTF-8 Unicode エンコーディング という意味の) UTF-8 を表す文字セットは
"utf8" が正解です。"UTF-8" ではありません。そのため、
"UTF-8" と指定しても文字セットは変わらず、エラーが発生します。
</para>
</simpara>
</note>
<example>

View File

@@ -1,26 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: d5ca1ca91dd8393ea8a3215b73722f59654f7849 Maintainer: takagi Status: ready -->
<!-- EN-Revision: 7cff4d34f0324c9de72d15957e1b62e20f37dfaf Maintainer: takagi Status: ready -->
<!-- Credits: mumumu --><set xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="set.mysqlinfo">
<title>MySQL ドライバおよびプラグイン</title>
<titleabbrev>MySQL</titleabbrev>
<info xml:id="mysqlinfo.info">
<abstract>
<para>
<simpara>
PHP で MySQL を扱うためのドライバやプラグインには、いくつかの種類があります。
</para>
<para>
</simpara>
<simpara>
それらの違いや MySQL 用拡張モジュールの機能について、ここで簡単に説明します。
</para>
<para>
</simpara>
<simpara>
ここで説明している拡張モジュールは、MySQL プロトコルをサポートしています。
それと互換性のあるデータベースサーバーは、
<link xlink:href="&url.mariadb;">MariaDB Server</link>,
<link xlink:href="&url.mysql;">MySQL Server</link>,
<link xlink:href="&url.perconaserver;">Percona Server for MySQL</link>,
<link xlink:href="&url.tidb;">TiDB</link> です。
</para>
</simpara>
</abstract>
</info>
@@ -30,12 +30,12 @@
<preface xml:id="mysqlinfo.intro">
<title>はじめに</title>
<para>
<simpara>
PHP から MySQL データベースにアクセスするための API は複数あります。
<link linkend="book.mysqli">mysqli</link> あるいは
<link linkend="ref.pdo-mysql">PDO_MySQL</link> が利用できます。
</para>
<para>
</simpara>
<simpara>
このページでは、これらの API についての説明に登場する
<link linkend="mysqlinfo.terminology">用語</link>
について解説したり、
@@ -43,53 +43,53 @@
を説明したり、選んだ API と組み合わせる MySQL の
<link linkend="mysqlinfo.library.choosing">ライブラリ</link>
について説明したりします。
</para>
</simpara>
</preface>
<chapter xmlns="http://docbook.org/ns/docbook" xml:id="mysqlinfo.terminology">
<title>用語説明</title>
<para>
<simpara>
このセクションでは、PHP アプリケーションの開発で MySQL データベースを扱う
ときの選択肢について説明します。
</para>
</simpara>
<para>
<simpara>
<emphasis role="bold">API って何?</emphasis>
</para>
</simpara>
<para>
<simpara>
API は Application Programming Interface の略で、
何らかのタスクを実行するためにアプリケーションから呼び出す必要のある
クラスやメソッド、関数、変数などを定義したものです。
データベースとの通信を必要とする PHP アプリケーションが使うための
API は、通常は PHP の拡張モジュールとして公開されています。
</para>
</simpara>
<para>
<simpara>
API は手続き型にすることもできるし、オブジェクト指向型にすることもできます。
手続き型の API の場合は何かの処理を実行するための関数を呼ぶことになり、
オブジェクト指向型の API の場合はクラスのインスタンスを作ってそのメソッドを呼ぶことになります。
通常は、後者の方法をおすすめします。後者のほうがよりモダンであり、
きっちりとしたコードを書けるからです。
</para>
</simpara>
<para>
<simpara>
MySQL サーバーとの接続が必要な PHP アプリケーションを書く場合に
使える API はいくつかあって、その中から選べます。
このドキュメントでは、どんな API が使えてどれを選ぶのが最適なのかを解説します。
</para>
</simpara>
<para>
<simpara>
<emphasis role="bold">コネクタとは</emphasis>
</para>
</simpara>
<para>
<simpara>
MySQL のドキュメントで使われている <emphasis>コネクタ</emphasis> という用語は、
何かのアプリケーションから MySQL データベースサーバーに接続するためのソフトウェアのことを指します。
MySQL はさまざまな言語用のコネクタを提供しており、PHP もその中に含まれます。
</para>
</simpara>
<para>
<simpara>
PHP のアプリケーションでデータベースサーバーとの通信が必要になったときには、
データベースサーバーへの接続やデータベースへの問い合わせなどの関数を呼ぶ
PHP コードを書くことになるでしょう。つまり、PHP アプリケーションから使える
@@ -99,75 +99,75 @@
このソフトウェアのことを一般的にコネクタと呼びます。というのも、このソフトウェアのおかげで
アプリケーションがデータベースサーバーに
<emphasis>接続 (connect)</emphasis> できるようになるからです。
</para>
</simpara>
<para>
<simpara>
<emphasis role="bold">ドライバとは</emphasis>
</para>
</simpara>
<para>
<simpara>
ドライバとは、特定のデータベースサーバーとの通信をするために作られたソフトウェアのことです。
ドライバはライブラリと呼ばれることもあり、
MySQL Client Library や MySQL Native Driver というように使われます。
これらのライブラリが実装するのは低レベルのプロトコルで、
これを使って MySQL データベースサーバーと通信します。
</para>
</simpara>
<para>
<simpara>
例を挙げると、データベース抽象化レイヤーの <link linkend="mysqli.overview.pdo">PHP
Data Objects (PDO)</link> は各データベース専用のドライバの中からひとつを選んで使います。
数あるドライバの中のひとつに PDO MYSQL ドライバがあり、これが
MySQL サーバーとのインターフェイスとなります。
</para>
</simpara>
<para>
<simpara>
人によっては、コネクタとドライバを混同して使うこともあって、混乱の元となります。
MySQL 関連のドキュメントでは、
<quote>コネクタ</quote> という用語はデータベース固有の機能を提供するソフトウェアという意味で
予約されています。
</para>
</simpara>
<para>
<simpara>
<emphasis role="bold">拡張モジュールとは</emphasis>
</para>
</simpara>
<para>
<simpara>
PHP のドキュメントを読んでいると、
<emphasis>拡張モジュール</emphasis> という用語がよく出てきます。
PHP のコードには、コア機能とは別に
オプションの拡張モジュールが用意されています。
PHP で使える MySQL 関連の拡張モジュールには <literal>mysqli</literal> があり、
PHP の拡張モジュール用フレームワークを使って実装されています。
</para>
</simpara>
<para>
<simpara>
拡張モジュールは一般的に PHP プログラマー向けの API を公開しており、
その機能をプログラムから使えるようになっています。
しかし、PHP 拡張モジュールフレームワークを使って書かれた拡張モジュールの中には、
PHP プログラマー向けの API を公開していないものもあります。
</para>
</simpara>
<para>
<simpara>
たとえば PDO MySQL ドライバは PHP の拡張モジュールですが、
それ自体は PHP プログラマー向けの API を公開していません。
さらに上位にある PDO レイヤーへのインターフェイスを提供しているだけです。
</para>
</simpara>
<para>
<simpara>
API と拡張モジュールとは同じ意味ではありません。
拡張モジュールが必ずしもプログラマー向けの API を公開しているとは限らないからです。
</para>
</simpara>
</chapter>
<chapter xmlns="http://docbook.org/ns/docbook" xml:id="mysqlinfo.api.choosing">
<title>どの API を使うか</title>
<para>
<simpara>
PHP には、様々な MySQL へ接続する API があります。
以下に、mysqli と PDO が提供する API を示します。
それぞれのコードは、"example.com" 上で稼働する MySQL サーバーに
ユーザー名 "user"、パスワード "password" で接続するものです。
そして、クエリを実行してユーザーにあいさつします。
</para>
</simpara>
<example>
<title>MySQL 用 API の比較</title>
<programlisting role="php">
@@ -209,14 +209,14 @@ echo htmlentities($row['District']);
]]>
</programlisting>
</example>
<para>
<simpara>
<emphasis role="bold">機能の比較</emphasis>
</para>
<para>
</simpara>
<simpara>
全体的なパフォーマンスは、どれもほぼ同じです。
拡張モジュール自体のパフォーマンスが PHP のウェブリクエストの実行時間に及ぼす影響はごくわずかで、
たいていは 0.1% 程度に過ぎません。
</para>
</simpara>
<informaltable xml:id="mysqlinfo.api.choosing.changelog">
<tgroup cols="3">
<thead>
@@ -319,19 +319,19 @@ echo htmlentities($row['District']);
<chapter xmlns="http://docbook.org/ns/docbook" xml:id="mysqlinfo.library.choosing">
<title>どのライブラリを選ぶか</title>
<para>
<simpara>
mysqli、PDO_MySQL といった PHP 拡張モジュールは、
どれも C クライアントライブラリの軽量なラッパーです。これらの拡張モジュールは、
<link linkend="book.mysqlnd">mysqlnd</link> ライブラリあるいは <literal>libmysqlclient</literal>
ライブラリのいずれかを使えます。どちらを使うのかを決めるのは、コンパイル時です。
</para>
<para>
</simpara>
<simpara>
mysqlnd ライブラリは、PHP の一部として配布されています。
遅延接続やクエリのキャッシュなど、libmysqlclient にはない機能も搭載されているので、
この mysqlnd ライブラリを使うことを強くおすすめします。
<link linkend="book.mysqlnd">mysqlnd のドキュメント</link>
には、さらなる詳細情報や機能一覧があります。
</para>
</simpara>
<example>
<title>mysqlnd あるいは libmysqlclient を使う場合の configure コマンド</title>
<programlisting role="shell">
@@ -347,14 +347,14 @@ $ ./configure --with-mysqli=/path/to/mysql_config --with-pdo-mysql=/path/to/mysq
]]>
</programlisting>
</example>
<para>
<simpara>
<emphasis role="bold">ライブラリの機能比較</emphasis>
</para>
<para>
</simpara>
<simpara>
<link linkend="book.mysqlnd">mysqlnd</link> を使うほうが、
MySQL Client Server library (libmysqlclient) よりもおすすめです。
どちらのライブラリも、開発が続いています。
</para>
</simpara>
<informaltable xml:id="mysqlinfo.library.choosing.changelog">
<tgroup cols="3">
<thead>