cvs: peardoc /ja/package/database/db intro-fetch.xml

From: Date: Thu, 22 Jan 2004 03:44:14 +0000
Subject: cvs: peardoc /ja/package/database/db intro-fetch.xml
Groups: php.pear.doc 
Request: Send a blank email to pear-doc+get-2147@lists.php.net to get a copy of this message
elf Wed Jan 21 22:44:14 2004 EDT Added files: /peardoc/ja/package/database/db intro-fetch.xml Log: o added japanese manual.

http://cvs.php.net/co.php/peardoc/ja/package/database/db/intro-fetch.xml?r=1.1&p=1 Index: peardoc/ja/package/database/db/intro-fetch.xml +++ peardoc/ja/package/database/db/intro-fetch.xml <!-- $Revision: 1.1 $ --> <!-- Sync: 1.8 --> <refentry id="package.database.db.intro-fetch"> <refnamediv> <refname>導入 - 取得</refname> <refpurpose>クエリ結果からレコードを取得する</refpurpose> </refnamediv> <refsect1 id="package.database.db.intro-fetch.desc"> <title>説明</title> <refsect2> <title>フェッチ関数</title> <simpara> &class.db-result; オブジェクトは、レコードを取得する関数を <function>fetchRow</function>と <link linkend="package.database.db.db-result.fetchinto"> <function>fetchInto</function></link> の2種類提供します。 <link linkend="package.database.db.db-result.fetchrow"> <function>fetchRow</function></link> はレコードを返し、レコードがもうな い場合は&null;を、 エラーが発生した場合は<link linkend="package.database.db.db-error"> <classname>DB_Error</classname></link>を返します。 <link linkend="package.database.db.db-result.fetchinto"> <function>fetchInto</function></link>は変数を引数とし、 ここには、結果レコードへのリファレンスが直接代入されます。 この関数は、結果セットが空の場合に&null;を、または<link linkend="package.database.db.db-error"> <classname>DB_Error</classname></link>を返します。 <link linkend="package.database.db.db-result.fetchinto"> <function>fetchInto</function></link>は変数を引数とし、 ここには、結果レコードへのリファレンスが直接代入されます。 その結果セットが空の場合は&null;、または <link linkend="package.database.db.db-error"> <classname>DB_Error</classname></link>が返ります。 </simpara> <example> <title>結果の取得</title> <programlisting role="php"> <![CDATA[ <?php ... $db = DB::connect($dsn); $res = $db->query("SELECT * FROM mytable"); // Get each row of data on each iteration until // there are no more rows while ($row = $res->fetchRow()) { $id = $row[0]; } // Or: // an example using fetchInto() while ($res->fetchInto($row)) { $id = $row[0]; } ?> ]]> </programlisting> </example> </refsect2> <refsect2> <title>レコードの取得形式を選択する</title> <para> サポートされる取得モードは下記の通りです。 <itemizedlist> <listitem> <para> <constant>DB_FETCHMODE_ORDERED</constant> (デフォルト) </para> <para> <function>fetch*</function> は、添字配列を返します。 順番はselect命令から取得します。 <example> <title>順番に配列に取得</title> <programlisting role="php"> <![CDATA[ <?php $res = $db->query('SELECT id, name, email FROM users'); $row = $res->fetchRow(DB_FETCHMODE_ORDERED); /* $row には以下が含まれます。 array ( 0 => <column "id" data>, 1 => <column "name" data>, 2 => <column "email" data> ) */ // 以下のようにアクセスします。 $id = $row[0]; $name = $row[1]; $email = $row[2]; ?> ]]> </programlisting> </example> </para> </listitem> <listitem> <para> <constant>DB_FETCHMODE_ASSOC</constant> </para> <para> 配列キーとしてカラム名を有する連想配列を返します。 <example> <title>連想配列で取得</title> <programlisting role="php"> <![CDATA[ <?php $res = $db->query('SELECT id, name, email FROM users'); $row = $res->fetchRow(DB_FETCHMODE_ASSOC); /* $row には以下が含まれます。 array ( 'id' => <column "id" data>, 'name' => <column "name" data>, 'email' => <column "email" data> ) */ // 以下のようにアクセスします。 $id = $row['id']; $name = $row['name']; $email = $row['email']; ?> ]]> </programlisting> </example> </para> </listitem> <listitem> <para> <constant>DB_FETCHMODE_OBJECT</constant> </para> <para> プロパティとしてカラム名を有する &class.db-row;オブジェクトを返します。 <example> <title>オブジェクトで取得</title> <programlisting role="php"> <![CDATA[ <?php $res = $db->query('SELECT id, name, email FROM users'); $row = $res->fetchRow(DB_FETCHMODE_OBJECT); /* $row には以下が含まれます。 db_row Object ( [id] => <column "id" data>, [name] => <column "name" data>, [email] => <column "email" data> ) */ // 以下のようにアクセスします。 $id = $row->id; $name = $row->name; $email = $row->email; ?> ]]> </programlisting> </example> </para> </listitem> </itemizedlist> </para> </refsect2> <refsect2> <title>取得したレコードの形式を設定する</title> <para> 各コール毎またはDBインスタンス全体で取得モードを設定することが 可能です。 <example> <title>呼び出し毎</title> <programlisting role="php"> <![CDATA[ while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC)) { $id = $row['id']; } ]]> </programlisting> </example> <example> <title>インスタンス毎</title> <programlisting role="php"> <![CDATA[ $db = DB::connect($dsn); // これは、PEAR DBインスタンスのデフォルトの取得モードを // (全てのクエリについて)設定します while ($row = $result->fetchRow()) { $id = $row['id']; } ]]> </programlisting> </example> </para> </refsect2> <refsect2> <title>数字でレコードを取得する</title> <para> PEAR DB fetchシステムは、 fetchステートメントで特別なパラメータもサポートしています。 このため、番号により結果からレコードを取得することが可能です。 これは、 (例えば、ページングを行うHTMLリストを作成する場合のように) 結果全体の部分集合の表示のみを行いたい場合や、 特別な順番でレコードを取得する場合等に特に便利です。 <example> <title>番号で取得</title> <programlisting role="php"> <![CDATA[ ... // 取得を開始するレコード $from = 50; // ページ毎の結果の数 $resPage = 10; // このページの最後の取得レコード $to = $from + $resPage; foreach (range($from, $to) as $rowNum) { if (!$row = $res->fetchrow($fetchmode, $rowNum)) { break; } $id = $row[0]; .... } ]]> </programlisting> </example> </para> </refsect2> <refsect2> <title>結果セットを解放する</title> <para> メモリを節約するために処理後には結果セットを解放することが推奨さ れます。これを行うには、<link linkend="package.database.db.db-result.free"><function>free</function></link> を使用して下さい。 <example> <title>開放する</title> <programlisting role="php"> <![CDATA[ ... $result = $db->query('SELECT * FROM clients'); while ($row = $result->fetchRow()) { ... } $result->free(); ]]> </programlisting> </example> </para> </refsect2> <refsect2> <title>簡易的なデータ取得</title> <para> &class.db;は、クエリから<function>fetch*</function>及び結果取得用の ループ処理を行わずに情報を取得するためのいくつかの特別な手段を提 供します。 </para> <para> <link linkend="package.database.db.db-common.getone"> <function>getOne</function></link>は、 クエリから先頭カラムの最初の結果を取得します。 <programlisting role="php"> <![CDATA[ $numrows = $db->getOne('select count(id) from clients'); ]]> </programlisting> </para> <para> <link linkend="package.database.db.db-common.getrow"><function>getRow</function> </link>は、先頭レコードを配列として返します。 <programlisting role="php"> <![CDATA[ $sql = 'select name, address, phone from clients where id=1'; if (is_array($row = $db->getRow($sql))) { list($name, $address, $phone) = $row; } ]]> </programlisting> </para> <para> <link linkend="package.database.db.db-common.getcol"> <function>getCol</function></link>は、 選択したカラムのデータを有する配列を返します。 この関数には、 2番目のパラメータとして取得するカラムの番号を指定可能です。 <programlisting role="php"> <![CDATA[ $all_client_names = $db->getCol('SELECT name FROM clients'); ]]> </programlisting> The above sentence could return for example: <programlisting role="php"> $all_client_names = array('Stig', 'Jon', 'Colin'); </programlisting> </para> <para> <link linkend="package.database.db.db-common.getassoc"> <function>getAssoc</function></link>は、 クエリの結果をすべて取得し、 最初のカラムをキーとする連想配列として返します。 <programlisting role="php"> <![CDATA[ $data = getAssoc('SELECT name, surname, phone FROM mytable') /* Will return: array( 'Peter' => array('Smith', '944679408'), 'Tomas' => array('Cox', '944679408'), 'Richard' => array('Merz', '944679408') ) */ ]]> </programlisting> </para> <para> <link linkend="package.database.db.db-common.getall"> <function>getAll</function></link>は、 クエリから返された全てのレコードを取得します。 <programlisting role="php"> <![CDATA[ $data = getAll('SELECT id, text, date FROM mytable'); /* Will return: array( 1 => array('4', 'four', '2004'), 2 => array('5', 'five', '2005'), 3 => array('6', 'six', '2006') ) */ ]]> </programlisting> </para> <para> <function>get*</function>で始まるメソッドは、 繁雑な仕事を全て引き受けます。 それはクエリを実行や、データの取得、結果を解放するといった処理です。 全てのPEAR DB関数は、 エラー時に&class.db-error;オブジェクトを返すことに注意して下さい。 </para> </refsect2> <refsect2> <title>クエリ結果から情報を更に取得する</title> <para> &class.db;は、 クエリ結果から有用な情報を取得する多くの手段をサポートしています。 それらを以下に示します。 <itemizedlist> <listitem> <para> <link linkend="package.database.db.db-result.numrows"> <function>numRows</function></link>: "SELECT"クエリから返されたレコードの総数を返します。 <programlisting role="php"> <![CDATA[ // Number of rows echo $res->numRows(); ]]> </programlisting> </para> </listitem> <listitem> <para> <link linkend="package.database.db.db-result.numcols"> <function>numCols</function></link>: "SELECT"クエリから返された総カラム数を返します。 <programlisting role="php"> <![CDATA[ // Number of cols echo $res->numCols(); ]]> </programlisting> </para> </listitem> <listitem> <para> <link linkend="package.database.db.db-common.affectedrows"> <function>affectedRows</function></link>: データを操作するクエリ ("INSERT", "UPDATE" ,"DELETE") により変更されたレコードの数を返します。 <programlisting role="php"> <![CDATA[ // remember that this statement won't return a result object $db->query('DELETE * FROM clients'); echo 'I have deleted ' . $db->affectedRows() . ' clients'; ]]> </programlisting> </para> </listitem> <listitem> <para> <link linkend="package.database.db.db-result.tableinfo"> <function>tableInfo</function></link>: "SELECT"クエリから返されるフィールドに関する情報を連想配列と して返します。 <programlisting role="php"> <![CDATA[ // Table Info print_r($res->tableInfo()); ]]> </programlisting> </para> </listitem> </itemizedlist> 返された処理結果が &class.db-error; オブジェクトでないかどうかを確認することを忘れないようにして下さい。 <quote>DB_error: database not capable</quote>のようなエラーメッ セージが発生する場合、使用するデータベースバックエンドではこの機 能はサポートされていないとを意味します。 </para> </refsect2> </refsect1> </refentry> <!-- 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 sgml-parent-document:nil sgml-default-dtd-file:"../../../../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 -->
« previous php.pear.doc (#2147) next »