com doc/ja: Updating mysqli: fixing mysqli_report: refere nce/mysqli/mysqli_driver/report-mode.xml

[email protected] (Yoshinari Takaoka) Mon, 11 Jan 2021 01:34:23 +0000
Newsgroups php.doc.ja
Message-ID <[email protected]>
Commit:    7dad9e5ecd7a4df15ba67389c5866d60cc94bc6b
Author:    Yoshinari Takaoka <[email protected]>         Mon, 11 Jan 2021 10:34:23 +0900
Parents:   5915802baa0d6d5b816803bab1d935418ff21aab
Branches:  master

Link:       http://git.php.net/?p=doc/ja.git;a=commitdiff;h=7dad9e5ecd7a4df15ba67389c5866d60cc94bc6b

Log:
Updating mysqli: fixing mysqli_report

Co-authored-by: Anna Filina <[email protected]>
Co-authored-by: Christoph M. Becker <[email protected]>

Closes GH-180.

Changed paths:
  M  reference/mysqli/mysqli_driver/report-mode.xml


Diff:
diff --git a/reference/mysqli/mysqli_driver/report-mode.xml b/reference/mysqli/mysqli_driver/report-mode.xml
index cc26154078..a1a3ff46e2 100644
--- a/reference/mysqli/mysqli_driver/report-mode.xml
+++ b/reference/mysqli/mysqli_driver/report-mode.xml
@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- $Revision$ -->
-<!-- EN-Revision: 97986d5b11545e52b498c8d2f4cd88844d427390 Maintainer: takagi Status: ready -->
+<!-- EN-Revision: 2bd21ff7be5615b10b5133fe896e0befd13df15c Maintainer: takagi Status: ready -->
 <!-- Credits: mumumu -->
 <refentry xml:id="mysqli-driver.report-mode" xmlns="http://docbook.org/ns/docbook">
  <refnamediv>
   <refname>mysqli_driver::$report_mode</refname>
   <refname>mysqli_report</refname>
-  <refpurpose>内部のレポート機能を有効あるいは無効にする</refpurpose>
+  <refpurpose>mysqli のエラー報告モードを設定する</refpurpose>
  </refnamediv>
 
  <refsect1 role="description">
@@ -21,9 +21,14 @@
    <methodparam><type>int</type><parameter>flags</parameter></methodparam>
   </methodsynopsis>
   <para>
-   開発中やテスト時に、クエリを改善するために便利な関数です。
-   指定するフラグに応じて、
-   mysqli の関数呼び出しのエラーやインデックスを使わない (あるいは不適切なインデックスを使う) クエリなどをレポートします。
+   フラグに応じて、mysqli のエラー報告モードを設定します。
+   例外をスローするモードや、警告を発生させるモード、エラーを報告しないモードを設定できます。
+   <constant>MYSQLI_REPORT_ALL</constant> や
+   <constant>MYSQLI_REPORT_INDEX</constant> に設定すると、
+   インデックスを使わない(または、インデックスの使い方が良くない) クエリも報告します。
+  </para>
+  <para>
+   デフォルトはの設定は <constant>MYSQLI_REPORT_OFF</constant> です。
   </para>
  </refsect1>
 
@@ -80,7 +85,7 @@
  <refsect1 role="returnvalues">
   &reftitle.returnvalues;
   <para>
-   &return.success;
+   &true; を返します。
   </para>
  </refsect1>
 
@@ -92,35 +97,22 @@
 <![CDATA[
 <?php
 
-$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
-
-/* 接続をチェックします */
-if (mysqli_connect_errno()) {
-    printf("Connect failed: %s\n", mysqli_connect_error());
-    exit();
-}
-
-/* レポート機能を有効にします */
+/* レポートを有効にします。 */
 $driver = new mysqli_driver();
 $driver->report_mode = MYSQLI_REPORT_ALL;
 
 try {
+    /* 接続が失敗すると, mysqli_sql_exception がスローされます。*/
+    $mysqli = new mysqli("localhost", "my_user", "my_password", "my_db");
 
-    /* このクエリはエラーのレポートを出すはずです */
+    /* このクエリは、エラーを報告するはずです。 */
     $result = $mysqli->query("SELECT Name FROM Nonexistingtable WHERE population > 50000");
 
-    /* このクエリは不適切なインデックスのレポートを出すはずです */
+    /* このクエリは、カラムがインデックスを持っていた場合、エラーを報告するはずです。*/
     $result = $mysqli->query("SELECT Name FROM City WHERE population > 50000");
-
-    $result->close();
-
-    $mysqli->close();
-
 } catch (mysqli_sql_exception $e) {
-
-    echo $e->__toString();
+    error_log($e->__toString());
 }
-?>
 ]]>
    </programlisting>
   </example>
@@ -129,27 +121,46 @@ try {
    <programlisting role="php">
 <![CDATA[
 <?php
-/* レポート機能を有効にします */
+
+/* activate reporting */
 mysqli_report(MYSQLI_REPORT_ALL);
 
-$link = mysqli_connect("localhost", "my_user", "my_password", "world");
+try {
+    $link = mysqli_connect("localhost", "my_user", "my_password", "my_db");
+
+    /* このクエリは、エラーを報告するはずです。 */
+    $result = mysqli_query($link, "SELECT Name FROM Nonexistingtable WHERE population > 50000");
 
-/* 接続をチェックします */
-if (mysqli_connect_errno()) {
-    printf("Connect failed: %s\n", mysqli_connect_error());
-    exit();
+    /* このクエリは、カラムがインデックスを持っていた場合、エラーを報告するはずです。*/
+    $result = mysqli_query($link, "SELECT Name FROM City WHERE population > 50000");
+} catch (mysqli_sql_exception $e) {
+    error_log($e->__toString());
 }
+]]>
+   </programlisting>
+  </example>
+  <example>
+   <title>Error reporting except bad index errors</title>
+   <programlisting role="php">
+<![CDATA[
+<?php
 
-/* このクエリはエラーのレポートを出すはずです */
-$result = mysqli_query("SELECT Name FROM Nonexistingtable WHERE population > 50000");
+/* activate reporting */
+mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
 
-/* このクエリは不適切なインデックスのレポートを出すはずです */
-$result = mysqli_query("SELECT Name FROM City WHERE population > 50000");
+try {
+    /* 接続が失敗すると, mysqli_sql_exception がスローされます。*/
+    $mysqli = new mysqli("localhost", "my_user", "my_password", "my_db");
+    $mysqli = new mysqli("localhost", "my_user", "my_password", "my_db");
 
-mysqli_free_result($result);
+    /* このクエリは、エラーを報告するはずです。 */
+    $result = $mysqli->query("SELECT Name FROM Nonexistingtable WHERE population > 50000");
 
-mysqli_close($link);
-?>
+    /* このクエリは、インデックスが使えなかったとしても、一切エラーを報告しません */
+    $result = $mysqli->query("SELECT Name FROM City WHERE population > 50000");
+} catch (mysqli_sql_exception $e) {
+    error_log($e->__toString());
+}
 ]]>
    </programlisting>
   </example>
@@ -159,8 +170,6 @@ mysqli_close($link);
   &reftitle.seealso;
   <para>
    <simplelist>
-    <member><function>mysqli_debug</function></member>
-    <member><function>mysqli_dump_debug_info</function></member>
     <member><classname>mysqli_sql_exception</classname></member>
     <member><function>set_exception_handler</function></member>
     <member><function>error_reporting</function></member>