com doc/ja: Updating mysqli prepared statements docs: reference/mysqli/mysqli/prepare.xml reference/mysqli/mysqli_s tmt/construct.xml
reference/mysqli/mysqli_stmt/execute. xml reference/mysqli/mysqli_stmt/prepare.xml
| From: | Yoshinari Takaoka | Date: | Tue, 09 Mar 2021 12:55:17 +0000 |
| Subject: | com doc/ja: Updating mysqli prepared statements docs: reference/mysqli/mysqli/prepare.xml reference/mysqli/mysqli_s tmt/construct.xml reference/mysqli/mysqli_stmt/execute. xml reference/mysqli/mysqli_stmt/prepare.xml |
||
| Groups: | php.doc.ja | ||
| Request: | Send a blank email to doc-ja+get-6245@lists.php.net to get a copy of this message | ||
Commit: bdcfef085fcc315e842257de8ce680cd82480c3e
Author: Yoshinari Takaoka <mumumu@mumumu.org> Tue, 9 Mar 2021 21:55:17 +0900
Parents: 38322a03a9447bd01fad1265ad9b8a3e1b742783
Branches: master
Link: http://git.php.net/?p=doc/ja.git;a=commitdiff;h=bdcfef085fcc315e842257de8ce680cd82480c3e
Log:
Updating mysqli prepared statements docs
Co-authored-by: George Peter Banyard <7906688+Girgias@users.noreply.github.com>
Closes GH-338.
Changed paths:
M reference/mysqli/mysqli/prepare.xml
M reference/mysqli/mysqli_stmt/construct.xml
M reference/mysqli/mysqli_stmt/execute.xml
M reference/mysqli/mysqli_stmt/prepare.xml
diff --git a/reference/mysqli/mysqli/prepare.xml b/reference/mysqli/mysqli/prepare.xml index 5763a58cc8..cd09add174 100644 --- a/reference/mysqli/mysqli/prepare.xml +++ b/reference/mysqli/mysqli/prepare.xml @@ -1,12 +1,12 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> -<!-- EN-Revision: 46319b5952750bc2a5e030c0a216023b551b60c1 Maintainer: takagi Status: ready --> +<!-- EN-Revision: 0a4dd74391b71c6837685b1864c9d5142c2725ee Maintainer: takagi Status: ready --> <!-- Credits: mumumu --> <refentry xml:id="mysqli.prepare" xmlns="http://docbook.org/ns/docbook"> <refnamediv> <refname>mysqli::prepare</refname> <refname>mysqli_prepare</refname> - <refpurpose>実行するための SQL ステートメントを準備する</refpurpose> + <refpurpose>実行するための SQL文 を準備する</refpurpose> </refnamediv> <refsect1 role="description"> @@ -23,14 +23,16 @@ <methodparam><type>string</type><parameter>query</parameter></methodparam> </methodsynopsis> <para> - SQL クエリを準備し、後でそのステートメントを操作するために使用する + SQL文を準備し、後でそれを操作するために使用する ステートメントハンドルを返します。 - クエリは、単一の SQL 文である必要があります。 + クエリは、単一の SQL文である必要があります。 </para> <para> - パラメータマーカは、ステートメントの実行や行の取得の前に - <function>mysqli_stmt_bind_param</function> - や <function>mysqli_stmt_bind_result</function> を使用して + SQL文のテンプレートには、ゼロ個以上のパラメータマーカ + (<literal>?</literal>) を含めることができます。 + パラメータマーカは、プレースホルダとも呼ばれています。 + パラメータマーカは、SQL文を実行する前に + <function>mysqli_stmt_bind_param</function> を使用して アプリケーション変数にバインドする必要があります。 </para> </refsect1> @@ -45,17 +47,11 @@ <listitem> <para> クエリを表す文字列。 + 単一のSQL文である必要があります。 </para> - <note> - <para> - ステートメントの最後にセミコロンや <literal>\g</literal> - を追加してはいけません。 - </para> - </note> <para> - <parameter>query</parameter> にはひとつまたは複数のパラメータを - 含めることが可能です。そのためには、適切な位置にクエスチョンマーク - (<literal>?</literal>) を埋め込みます。 + SQL文には、ゼロ個以上のパラメータマーカを含めることができますます。 + パラメータマーカはクエスチョンマーク(<literal>?</literal>) を適切な位置に置くこと埋め込みます。 </para> <note> <para> @@ -71,8 +67,6 @@ (等号 <literal>=</literal> のような) 二項演算子の両側にパラメータを指定したりすることはできません。 後者の制限は、パラメータの型が判断できなくなることによるものです。 - また、パラメータのマーカを <literal>NULL</literal> と比較して - <literal>? IS NULL</literal> のようにすることもできません。 一般に、パラメータが使用可能なのはデータ操作言語 (DML) ステートメントであり、データ定義言語 (DDL) ステートメントでは使用できません。 @@ -100,80 +94,56 @@ <programlisting role="php"> <![CDATA[ <?php -$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); -/* 接続状況をチェックします */ -if (mysqli_connect_errno()) { - printf("Connect failed: %s\n", mysqli_connect_error()); - exit(); -} +mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); +$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); $city = "Amersfoort"; -/* プリペアドステートメントを作成します */ -if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) { +/* プリペアドステートメントを作成します。*/ +$stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?"); - /* マーカにパラメータをバインドします */ - $stmt->bind_param("s", $city); +/* マーカにパラメータをバインドします */ +$stmt->bind_param("s", $city); - /* クエリを実行します */ - $stmt->execute(); +/* クエリを実行します */ +$stmt->execute(); - /* 結果変数をバインドします */ - $stmt->bind_result($district); +/* 結果変数をバインドします */ +$stmt->bind_result($district); - /* 値を取得します */ - $stmt->fetch(); +/* 値を取得します */ +$stmt->fetch(); - printf("%s is in district %s\n", $city, $district); - - /* ステートメントを閉じます */ - $stmt->close(); -} - -/* 接続を閉じます */ -$mysqli->close(); -?> +printf("%s is in district %s\n", $city, $district); ]]> </programlisting> <para>&style.procedural;</para> <programlisting role="php"> <![CDATA[ <?php -$link = mysqli_connect("localhost", "my_user", "my_password", "world"); -/* 接続状況をチェックします */ -if (mysqli_connect_errno()) { - printf("Connect failed: %s\n", mysqli_connect_error()); - exit(); -} +mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); +$link = mysqli_connect("localhost", "my_user", "my_password", "world"); $city = "Amersfoort"; /* プリペアドステートメントを作成します */ -if ($stmt = mysqli_prepare($link, "SELECT District FROM City WHERE Name=?")) { - - /* マーカにパラメータをバインドします */ - mysqli_stmt_bind_param($stmt, "s", $city); - - /* クエリを実行します */ - mysqli_stmt_execute($stmt); +$stmt = mysqli_prepare($link, "SELECT District FROM City WHERE Name=?"); - /* 結果変数をバインドします */ - mysqli_stmt_bind_result($stmt, $district); +/* マーカにパラメータをバインドします */ +mysqli_stmt_bind_param($stmt, "s", $city); - /* 値を取得します */ - mysqli_stmt_fetch($stmt); +/* クエリを実行します */ +mysqli_stmt_execute($stmt); - printf("%s is in district %s\n", $city, $district); +/* 結果変数をバインドします */ +mysqli_stmt_bind_result($stmt, $district); - /* ステートメントを閉じます */ - mysqli_stmt_close($stmt); -} +/* 値を取得します */ +mysqli_stmt_fetch($stmt); -/* 接続を閉じます */ -mysqli_close($link); -?> +printf("%s is in district %s\n", $city, $district); ]]> </programlisting> &examples.outputs; @@ -193,6 +163,7 @@ Amersfoort is in district Utrecht <member><function>mysqli_stmt_fetch</function></member> <member><function>mysqli_stmt_bind_param</function></member> <member><function>mysqli_stmt_bind_result</function></member> + <member><function>mysqli_stmt_get_result</function></member> <member><function>mysqli_stmt_close</function></member> </simplelist> </para> diff --git a/reference/mysqli/mysqli_stmt/construct.xml b/reference/mysqli/mysqli_stmt/construct.xml index 030ac1822b..8cbe2a31f5 100644 --- a/reference/mysqli/mysqli_stmt/construct.xml +++ b/reference/mysqli/mysqli_stmt/construct.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> -<!-- EN-Revision: b9ba4fca83e593ded6fce54ed886dc5cfa7a2ebb Maintainer: mumumu Status: ready --> +<!-- EN-Revision: 0a4dd74391b71c6837685b1864c9d5142c2725ee Maintainer: mumumu Status: ready --> <!-- Credits: mumumu --> <refentry xml:id="mysqli-stmt.construct" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> @@ -25,7 +25,14 @@ &reftitle.parameters; <para> <variablelist> - &mysqli.link.description; + <varlistentry> + <term><parameter>link</parameter></term> + <listitem> + <para> + 有効な <classname>mysqli</classname> オブジェクト + </para> + </listitem> + </varlistentry> <varlistentry> <term><parameter>query</parameter></term> <listitem> diff --git a/reference/mysqli/mysqli_stmt/execute.xml b/reference/mysqli/mysqli_stmt/execute.xml index 890a5bf3e5..af16aed29f 100644 --- a/reference/mysqli/mysqli_stmt/execute.xml +++ b/reference/mysqli/mysqli_stmt/execute.xml @@ -1,12 +1,12 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> -<!-- EN-Revision: ac2f69b3d07ae6a4e89a742918b01881b7381bf4 Maintainer: takagi Status: ready --> +<!-- EN-Revision: 0a4dd74391b71c6837685b1864c9d5142c2725ee Maintainer: takagi Status: ready --> <!-- Credits: mumumu --> <refentry xml:id="mysqli-stmt.execute" xmlns="http://docbook.org/ns/docbook"> <refnamediv> <refname>mysqli_stmt::execute</refname> <refname>mysqli_stmt_execute</refname> - <refpurpose>プリペアドクエリを実行する</refpurpose> + <refpurpose>プリペアドステートメントを実行する</refpurpose> </refnamediv> <refsect1 role="description"> @@ -22,23 +22,19 @@ <methodparam><type>mysqli_stmt</type><parameter>stmt</parameter></methodparam> </methodsynopsis> <para> - 事前に <function>mysqli_prepare</function> 関数で用意されたクエリを実行します。 - パラメータマーカが存在する場合、その内容は自動的に適切なデータに置き換えられます。 + 事前に準備したSQL文を実行します。 + SQL文は実行する前に、正常に準備されていなければいけません。 + 準備は、<function>mysqli_prepare</function> または + <function>mysqli_stmt_prepare</function> を実行するか、 + <methodname>mysqli_stmt::__construct</methodname> に第二引数を渡すことで行います。 </para> <para> - ステートメントが <literal>UPDATE</literal>、<literal>DELETE</literal> + SQL文が <literal>UPDATE</literal>、<literal>DELETE</literal> あるいは <literal>INSERT</literal> であった場合、 変更された行の総数は <function>mysqli_stmt_affected_rows</function> 関数を使用することで取得可能です。同様に、クエリが結果セットを返す場合は <function>mysqli_stmt_fetch</function> 関数を使用できます。 </para> - <note> - <para> - <function>mysqli_stmt_execute</function> を使用した際には、 - 他のクエリを実行する前に <function>mysqli_stmt_fetch</function> - 関数を使用する必要があります。 - </para> - </note> </refsect1> <refsect1 role="parameters"> @@ -60,59 +56,46 @@ <refsect1 role="examples"> &reftitle.examples; <example> - <title>&style.oop;</title> + <title><methodname>mysqli_stmt::execute</methodname> の例</title> + <para>&style.oop;</para> <programlisting role="php"> <![CDATA[ <?php -$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); -/* 接続状況をチェックします */ -if (mysqli_connect_errno()) { - printf("Connect failed: %s\n", mysqli_connect_error()); - exit(); -} +mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); +$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); $mysqli->query("CREATE TABLE myCity LIKE City"); -/* insert ステートメントを準備します */ -$query = "INSERT INTO myCity (Name, CountryCode, District) VALUES (?,?,?)"; -$stmt = $mysqli->prepare($query); +/* insert 文を準備します */ +$stmt = $mysqli->prepare("INSERT INTO myCity (Name, CountryCode, District) VALUES (?,?,?)"); +/* 変数をパラメータにバインドします */ $stmt->bind_param("sss", $val1, $val2, $val3); $val1 = 'Stuttgart'; $val2 = 'DEU'; $val3 = 'Baden-Wuerttemberg'; -/* ステートメントを実行します */ +/* SQL文を実行します */ $stmt->execute(); $val1 = 'Bordeaux'; $val2 = 'FRA'; $val3 = 'Aquitaine'; -/* ステートメントを実行します */ +/* SQL文を実行します */ $stmt->execute(); -/* ステートメントを閉じます */ -$stmt->close(); - -/* myCity からすべての行を取得します */ +/* myCity テーブルから全ての行を取得します */ $query = "SELECT Name, CountryCode, District FROM myCity"; -if ($result = $mysqli->query($query)) { - while ($row = $result->fetch_row()) { - printf("%s (%s,%s)\n", $row[0], $row[1], $row[2]); - } - /* 結果セットを開放します */ - $result->close(); +$result = $mysqli->query($query); +while ($row = $result->fetch_row()) { + printf("%s (%s,%s)\n", $row[0], $row[1], $row[2]); } /* テーブルを削除します */ $mysqli->query("DROP TABLE myCity"); - -/* 接続を閉じます */ -$mysqli->close(); -?> ]]> </programlisting> </example> @@ -121,55 +104,41 @@ $mysqli->close(); <programlisting role="php"> <![CDATA[ <?php -$link = mysqli_connect("localhost", "my_user", "my_password", "world"); -/* 接続状況をチェックします */ -if (mysqli_connect_errno()) { - printf("Connect failed: %s\n", mysqli_connect_error()); - exit(); -} +mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); +$link = mysqli_connect("localhost", "my_user", "my_password", "world"); mysqli_query($link, "CREATE TABLE myCity LIKE City"); -/* insert ステートメントを準備します */ -$query = "INSERT INTO myCity (Name, CountryCode, District) VALUES (?,?,?)"; -$stmt = mysqli_prepare($link, $query); +/* insert 文を準備します */ +$stmt = mysqli_prepare($link, "INSERT INTO myCity (Name, CountryCode, District) VALUES (?,?,?)"); +/* 変数をパラメータにバインドします */ mysqli_stmt_bind_param($stmt, "sss", $val1, $val2, $val3); $val1 = 'Stuttgart'; $val2 = 'DEU'; $val3 = 'Baden-Wuerttemberg'; -/* ステートメントを実行します */ +/* SQL文を実行します */ mysqli_stmt_execute($stmt); $val1 = 'Bordeaux'; $val2 = 'FRA'; $val3 = 'Aquitaine'; -/* ステートメントを実行します */ +/* SQL文を実行します */ mysqli_stmt_execute($stmt); -/* ステートメントを閉じます */ -mysqli_stmt_close($stmt); - -/* myCity からすべての行を取得します */ +/* myCity テーブルから全ての行を取得します */ $query = "SELECT Name, CountryCode, District FROM myCity"; -if ($result = mysqli_query($link, $query)) { - while ($row = mysqli_fetch_row($result)) { - printf("%s (%s,%s)\n", $row[0], $row[1], $row[2]); - } - /* 結果セットを開放します */ - mysqli_free_result($result); +$result = mysqli_query($link, $query); +while ($row = mysqli_fetch_row($result)) { + printf("%s (%s,%s)\n", $row[0], $row[1], $row[2]); } /* テーブルを削除します */ mysqli_query($link, "DROP TABLE myCity"); - -/* 接続を閉じます */ -mysqli_close($link); -?> ]]> </programlisting> &examples.outputs; diff --git a/reference/mysqli/mysqli_stmt/prepare.xml b/reference/mysqli/mysqli_stmt/prepare.xml index 30a4944a69..5f947c7be9 100644 --- a/reference/mysqli/mysqli_stmt/prepare.xml +++ b/reference/mysqli/mysqli_stmt/prepare.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> -<!-- EN-Revision: ac2f69b3d07ae6a4e89a742918b01881b7381bf4 Maintainer: takagi Status: ready --> +<!-- EN-Revision: 0a4dd74391b71c6837685b1864c9d5142c2725ee Maintainer: takagi Status: ready --> <!-- Credits: mumumu --> <refentry xml:id="mysqli-stmt.prepare" xmlns="http://docbook.org/ns/docbook"> <refnamediv> @@ -13,7 +13,7 @@ &reftitle.description; <para>&style.oop;</para> <methodsynopsis role="oop"> - <modifier>public</modifier> <type>mixed</type><methodname>mysqli_stmt::prepare</methodname> + <modifier>public</modifier> <type>bool</type><methodname>mysqli_stmt::prepare</methodname> <methodparam><type>string</type><parameter>query</parameter></methodparam> </methodsynopsis> <para>&style.procedural;</para> @@ -23,12 +23,15 @@ <methodparam><type>string</type><parameter>query</parameter></methodparam> </methodsynopsis> <para> - null で終わる文字列で指定した SQL クエリを準備します。 + 実行する前にSQL文を準備します。 + 指定するクエリは、単一のSQL文でなければいけません。 </para> <para> - パラメータマーカは、ステートメントの実行や行の取得の前に - <function>mysqli_stmt_bind_param</function> - や <function>mysqli_stmt_bind_result</function> を使用して + SQL文のテンプレートには、ゼロ個以上のパラメータマーカ + (<literal>?</literal>) を含めることができます。 + パラメータマーカは、プレースホルダとも呼ばれています。 + パラメータマーカは、ステートメントを実行する前に + <function>mysqli_stmt_bind_param</function> を使用して アプリケーション変数にバインドする必要があります。 </para> <note> @@ -77,30 +80,21 @@ クエリを表す文字列。単一の SQL 文で構成されている必要があります。 </para> <para> - ひとつまたは複数のパラメータを SQL 文に含めることができます。 - そのためには、適切な位置にクエスチョンマーク - (<literal>?</literal>) を埋め込みます。 + SQL文には、適切な位置にゼロ個以上のパラメータマーカを含めることができます。 + パラメータマーカは、クエスチョンマーク(<literal>?</literal>)で表します。 </para> <note> <para> - ステートメントの最後にセミコロンや <literal>\g</literal> - を追加してはいけません。 - </para> - </note> - <note> - <para> パラメータのマーカは、それが SQL 文の適切な位置にある場合のみ 有効です。例えば INSERT 文の VALUES() リストの中 (行に登録するカラム値を指定する) や - WHERE 句で列のデータと比較する値などが適切な位置の例です。 + <literal>WHERE</literal> 句で列のデータと比較する値などが適切な位置の例です。 </para> <para> しかし、識別子 (テーブルやカラムの名前) や SELECT 文で選択する 項目の名前に指定したり、(等号 <literal>=</literal> のような) 二項演算子の両側にパラメータを指定したりすることはできません。 後者の制限は、パラメータの型が判断できなくなることによるものです。 - また、パラメータのマーカを <literal>NULL</literal> と比較して - <literal>? IS NULL</literal> のようにすることもできません。 一般に、パラメータが使用可能なのはデータ操作言語 (DML) ステートメントであり、データ定義言語 (DDL) ステートメントでは 使用できません。 @@ -122,88 +116,65 @@ <refsect1 role="examples"> &reftitle.examples; <example> - <title>&style.oop;</title> + <title><methodname>mysqli_stmt::prepare</methodname> の例</title> + <para>&style.oop;</para> <programlisting role="php"> <![CDATA[ <?php -$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); -/* 接続状況をチェックします */ -if (mysqli_connect_errno()) { - printf("Connect failed: %s\n", mysqli_connect_error()); - exit(); -} +mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); +$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); $city = "Amersfoort"; /* プリペアドステートメントを作成します */ -$stmt = $mysqli->stmt_init(); -if ($stmt->prepare("SELECT District FROM City WHERE Name=?")) { +$stmt = $mysqli->stmt_init(); +$stmt->prepare("SELECT District FROM City WHERE Name=?"); - /* マーカにパラメータをバインドします */ - $stmt->bind_param("s", $city); +/* マーカにパラメータをバインドします */ +$stmt->bind_param("s", $city); - /* クエリを実行します */ - $stmt->execute(); +/* クエリを実行します */ +$stmt->execute(); - /* 結果変数をバインドします */ - $stmt->bind_result($district); +/* 結果変数をバインドします */ +$stmt->bind_result($district); - /* 値を取得します */ - $stmt->fetch(); +/* 値を取得します */ +$stmt->fetch(); - printf("%s is in district %s\n", $city, $district); - - /* ステートメントを閉じます */ - $stmt->close(); -} - -/* 接続を閉じます */ -$mysqli->close(); -?> +printf("%s is in district %s\n", $city, $district); ]]> </programlisting> </example> <example> - <title>&style.procedural;</title> + <para>&style.procedural;</para> <programlisting role="php"> <![CDATA[ <?php -$link = mysqli_connect("localhost", "my_user", "my_password", "world"); -/* 接続状況をチェックします */ -if (mysqli_connect_errno()) { - printf("Connect failed: %s\n", mysqli_connect_error()); - exit(); -} +mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); +$link = mysqli_connect("localhost", "my_user", "my_password", "world"); $city = "Amersfoort"; /* プリペアドステートメントを作成します */ $stmt = mysqli_stmt_init($link); -if (mysqli_stmt_prepare($stmt, 'SELECT District FROM City WHERE Name=?')) { - - /* マーカにパラメータをバインドします */ - mysqli_stmt_bind_param($stmt, "s", $city); - - /* クエリを実行します */ - mysqli_stmt_execute($stmt); +mysqli_stmt_prepare($stmt, "SELECT District FROM City WHERE Name=?"); - /* 結果変数をバインドします */ - mysqli_stmt_bind_result($stmt, $district); +/* マーカにパラメータをバインドします */ +mysqli_stmt_bind_param($stmt, "s", $city); - /* 値を取得します */ - mysqli_stmt_fetch($stmt); +/* クエリを実行します */ +mysqli_stmt_execute($stmt); - printf("%s is in district %s\n", $city, $district); +/* 結果変数をバインドします */ +mysqli_stmt_bind_result($stmt, $district); - /* ステートメントを閉じます */ - mysqli_stmt_close($stmt); -} +/* 値を取得します */ +mysqli_stmt_fetch($stmt); -/* 接続を閉じます */ -mysqli_close($link); -?> +printf("%s is in district %s\n", $city, $district); ]]> </programlisting> &examples.outputs;
diff --git a/reference/mysqli/mysqli/prepare.xml b/reference/mysqli/mysqli/prepare.xml index 5763a58cc8..cd09add174 100644 --- a/reference/mysqli/mysqli/prepare.xml +++ b/reference/mysqli/mysqli/prepare.xml @@ -1,12 +1,12 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> -<!-- EN-Revision: 46319b5952750bc2a5e030c0a216023b551b60c1 Maintainer: takagi Status: ready --> +<!-- EN-Revision: 0a4dd74391b71c6837685b1864c9d5142c2725ee Maintainer: takagi Status: ready --> <!-- Credits: mumumu --> <refentry xml:id="mysqli.prepare" xmlns="http://docbook.org/ns/docbook"> <refnamediv> <refname>mysqli::prepare</refname> <refname>mysqli_prepare</refname> - <refpurpose>実行するための SQL ステートメントを準備する</refpurpose> + <refpurpose>実行するための SQL文 を準備する</refpurpose> </refnamediv> <refsect1 role="description"> @@ -23,14 +23,16 @@ <methodparam><type>string</type><parameter>query</parameter></methodparam> </methodsynopsis> <para> - SQL クエリを準備し、後でそのステートメントを操作するために使用する + SQL文を準備し、後でそれを操作するために使用する ステートメントハンドルを返します。 - クエリは、単一の SQL 文である必要があります。 + クエリは、単一の SQL文である必要があります。 </para> <para> - パラメータマーカは、ステートメントの実行や行の取得の前に - <function>mysqli_stmt_bind_param</function> - や <function>mysqli_stmt_bind_result</function> を使用して + SQL文のテンプレートには、ゼロ個以上のパラメータマーカ + (<literal>?</literal>) を含めることができます。 + パラメータマーカは、プレースホルダとも呼ばれています。 + パラメータマーカは、SQL文を実行する前に + <function>mysqli_stmt_bind_param</function> を使用して アプリケーション変数にバインドする必要があります。 </para> </refsect1> @@ -45,17 +47,11 @@ <listitem> <para> クエリを表す文字列。 + 単一のSQL文である必要があります。 </para> - <note> - <para> - ステートメントの最後にセミコロンや <literal>\g</literal> - を追加してはいけません。 - </para> - </note> <para> - <parameter>query</parameter> にはひとつまたは複数のパラメータを - 含めることが可能です。そのためには、適切な位置にクエスチョンマーク - (<literal>?</literal>) を埋め込みます。 + SQL文には、ゼロ個以上のパラメータマーカを含めることができますます。 + パラメータマーカはクエスチョンマーク(<literal>?</literal>) を適切な位置に置くこと埋め込みます。 </para> <note> <para> @@ -71,8 +67,6 @@ (等号 <literal>=</literal> のような) 二項演算子の両側にパラメータを指定したりすることはできません。 後者の制限は、パラメータの型が判断できなくなることによるものです。 - また、パラメータのマーカを <literal>NULL</literal> と比較して - <literal>? IS NULL</literal> のようにすることもできません。 一般に、パラメータが使用可能なのはデータ操作言語 (DML) ステートメントであり、データ定義言語 (DDL) ステートメントでは使用できません。 @@ -100,80 +94,56 @@ <programlisting role="php"> <![CDATA[ <?php -$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); -/* 接続状況をチェックします */ -if (mysqli_connect_errno()) { - printf("Connect failed: %s\n", mysqli_connect_error()); - exit(); -} +mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); +$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); $city = "Amersfoort"; -/* プリペアドステートメントを作成します */ -if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) { +/* プリペアドステートメントを作成します。*/ +$stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?"); - /* マーカにパラメータをバインドします */ - $stmt->bind_param("s", $city); +/* マーカにパラメータをバインドします */ +$stmt->bind_param("s", $city); - /* クエリを実行します */ - $stmt->execute(); +/* クエリを実行します */ +$stmt->execute(); - /* 結果変数をバインドします */ - $stmt->bind_result($district); +/* 結果変数をバインドします */ +$stmt->bind_result($district); - /* 値を取得します */ - $stmt->fetch(); +/* 値を取得します */ +$stmt->fetch(); - printf("%s is in district %s\n", $city, $district); - - /* ステートメントを閉じます */ - $stmt->close(); -} - -/* 接続を閉じます */ -$mysqli->close(); -?> +printf("%s is in district %s\n", $city, $district); ]]> </programlisting> <para>&style.procedural;</para> <programlisting role="php"> <![CDATA[ <?php -$link = mysqli_connect("localhost", "my_user", "my_password", "world"); -/* 接続状況をチェックします */ -if (mysqli_connect_errno()) { - printf("Connect failed: %s\n", mysqli_connect_error()); - exit(); -} +mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); +$link = mysqli_connect("localhost", "my_user", "my_password", "world"); $city = "Amersfoort"; /* プリペアドステートメントを作成します */ -if ($stmt = mysqli_prepare($link, "SELECT District FROM City WHERE Name=?")) { - - /* マーカにパラメータをバインドします */ - mysqli_stmt_bind_param($stmt, "s", $city); - - /* クエリを実行します */ - mysqli_stmt_execute($stmt); +$stmt = mysqli_prepare($link, "SELECT District FROM City WHERE Name=?"); - /* 結果変数をバインドします */ - mysqli_stmt_bind_result($stmt, $district); +/* マーカにパラメータをバインドします */ +mysqli_stmt_bind_param($stmt, "s", $city); - /* 値を取得します */ - mysqli_stmt_fetch($stmt); +/* クエリを実行します */ +mysqli_stmt_execute($stmt); - printf("%s is in district %s\n", $city, $district); +/* 結果変数をバインドします */ +mysqli_stmt_bind_result($stmt, $district); - /* ステートメントを閉じます */ - mysqli_stmt_close($stmt); -} +/* 値を取得します */ +mysqli_stmt_fetch($stmt); -/* 接続を閉じます */ -mysqli_close($link); -?> +printf("%s is in district %s\n", $city, $district); ]]> </programlisting> &examples.outputs; @@ -193,6 +163,7 @@ Amersfoort is in district Utrecht <member><function>mysqli_stmt_fetch</function></member> <member><function>mysqli_stmt_bind_param</function></member> <member><function>mysqli_stmt_bind_result</function></member> + <member><function>mysqli_stmt_get_result</function></member> <member><function>mysqli_stmt_close</function></member> </simplelist> </para> diff --git a/reference/mysqli/mysqli_stmt/construct.xml b/reference/mysqli/mysqli_stmt/construct.xml index 030ac1822b..8cbe2a31f5 100644 --- a/reference/mysqli/mysqli_stmt/construct.xml +++ b/reference/mysqli/mysqli_stmt/construct.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> -<!-- EN-Revision: b9ba4fca83e593ded6fce54ed886dc5cfa7a2ebb Maintainer: mumumu Status: ready --> +<!-- EN-Revision: 0a4dd74391b71c6837685b1864c9d5142c2725ee Maintainer: mumumu Status: ready --> <!-- Credits: mumumu --> <refentry xml:id="mysqli-stmt.construct" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> @@ -25,7 +25,14 @@ &reftitle.parameters; <para> <variablelist> - &mysqli.link.description; + <varlistentry> + <term><parameter>link</parameter></term> + <listitem> + <para> + 有効な <classname>mysqli</classname> オブジェクト + </para> + </listitem> + </varlistentry> <varlistentry> <term><parameter>query</parameter></term> <listitem> diff --git a/reference/mysqli/mysqli_stmt/execute.xml b/reference/mysqli/mysqli_stmt/execute.xml index 890a5bf3e5..af16aed29f 100644 --- a/reference/mysqli/mysqli_stmt/execute.xml +++ b/reference/mysqli/mysqli_stmt/execute.xml @@ -1,12 +1,12 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> -<!-- EN-Revision: ac2f69b3d07ae6a4e89a742918b01881b7381bf4 Maintainer: takagi Status: ready --> +<!-- EN-Revision: 0a4dd74391b71c6837685b1864c9d5142c2725ee Maintainer: takagi Status: ready --> <!-- Credits: mumumu --> <refentry xml:id="mysqli-stmt.execute" xmlns="http://docbook.org/ns/docbook"> <refnamediv> <refname>mysqli_stmt::execute</refname> <refname>mysqli_stmt_execute</refname> - <refpurpose>プリペアドクエリを実行する</refpurpose> + <refpurpose>プリペアドステートメントを実行する</refpurpose> </refnamediv> <refsect1 role="description"> @@ -22,23 +22,19 @@ <methodparam><type>mysqli_stmt</type><parameter>stmt</parameter></methodparam> </methodsynopsis> <para> - 事前に <function>mysqli_prepare</function> 関数で用意されたクエリを実行します。 - パラメータマーカが存在する場合、その内容は自動的に適切なデータに置き換えられます。 + 事前に準備したSQL文を実行します。 + SQL文は実行する前に、正常に準備されていなければいけません。 + 準備は、<function>mysqli_prepare</function> または + <function>mysqli_stmt_prepare</function> を実行するか、 + <methodname>mysqli_stmt::__construct</methodname> に第二引数を渡すことで行います。 </para> <para> - ステートメントが <literal>UPDATE</literal>、<literal>DELETE</literal> + SQL文が <literal>UPDATE</literal>、<literal>DELETE</literal> あるいは <literal>INSERT</literal> であった場合、 変更された行の総数は <function>mysqli_stmt_affected_rows</function> 関数を使用することで取得可能です。同様に、クエリが結果セットを返す場合は <function>mysqli_stmt_fetch</function> 関数を使用できます。 </para> - <note> - <para> - <function>mysqli_stmt_execute</function> を使用した際には、 - 他のクエリを実行する前に <function>mysqli_stmt_fetch</function> - 関数を使用する必要があります。 - </para> - </note> </refsect1> <refsect1 role="parameters"> @@ -60,59 +56,46 @@ <refsect1 role="examples"> &reftitle.examples; <example> - <title>&style.oop;</title> + <title><methodname>mysqli_stmt::execute</methodname> の例</title> + <para>&style.oop;</para> <programlisting role="php"> <![CDATA[ <?php -$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); -/* 接続状況をチェックします */ -if (mysqli_connect_errno()) { - printf("Connect failed: %s\n", mysqli_connect_error()); - exit(); -} +mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); +$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); $mysqli->query("CREATE TABLE myCity LIKE City"); -/* insert ステートメントを準備します */ -$query = "INSERT INTO myCity (Name, CountryCode, District) VALUES (?,?,?)"; -$stmt = $mysqli->prepare($query); +/* insert 文を準備します */ +$stmt = $mysqli->prepare("INSERT INTO myCity (Name, CountryCode, District) VALUES (?,?,?)"); +/* 変数をパラメータにバインドします */ $stmt->bind_param("sss", $val1, $val2, $val3); $val1 = 'Stuttgart'; $val2 = 'DEU'; $val3 = 'Baden-Wuerttemberg'; -/* ステートメントを実行します */ +/* SQL文を実行します */ $stmt->execute(); $val1 = 'Bordeaux'; $val2 = 'FRA'; $val3 = 'Aquitaine'; -/* ステートメントを実行します */ +/* SQL文を実行します */ $stmt->execute(); -/* ステートメントを閉じます */ -$stmt->close(); - -/* myCity からすべての行を取得します */ +/* myCity テーブルから全ての行を取得します */ $query = "SELECT Name, CountryCode, District FROM myCity"; -if ($result = $mysqli->query($query)) { - while ($row = $result->fetch_row()) { - printf("%s (%s,%s)\n", $row[0], $row[1], $row[2]); - } - /* 結果セットを開放します */ - $result->close(); +$result = $mysqli->query($query); +while ($row = $result->fetch_row()) { + printf("%s (%s,%s)\n", $row[0], $row[1], $row[2]); } /* テーブルを削除します */ $mysqli->query("DROP TABLE myCity"); - -/* 接続を閉じます */ -$mysqli->close(); -?> ]]> </programlisting> </example> @@ -121,55 +104,41 @@ $mysqli->close(); <programlisting role="php"> <![CDATA[ <?php -$link = mysqli_connect("localhost", "my_user", "my_password", "world"); -/* 接続状況をチェックします */ -if (mysqli_connect_errno()) { - printf("Connect failed: %s\n", mysqli_connect_error()); - exit(); -} +mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); +$link = mysqli_connect("localhost", "my_user", "my_password", "world"); mysqli_query($link, "CREATE TABLE myCity LIKE City"); -/* insert ステートメントを準備します */ -$query = "INSERT INTO myCity (Name, CountryCode, District) VALUES (?,?,?)"; -$stmt = mysqli_prepare($link, $query); +/* insert 文を準備します */ +$stmt = mysqli_prepare($link, "INSERT INTO myCity (Name, CountryCode, District) VALUES (?,?,?)"); +/* 変数をパラメータにバインドします */ mysqli_stmt_bind_param($stmt, "sss", $val1, $val2, $val3); $val1 = 'Stuttgart'; $val2 = 'DEU'; $val3 = 'Baden-Wuerttemberg'; -/* ステートメントを実行します */ +/* SQL文を実行します */ mysqli_stmt_execute($stmt); $val1 = 'Bordeaux'; $val2 = 'FRA'; $val3 = 'Aquitaine'; -/* ステートメントを実行します */ +/* SQL文を実行します */ mysqli_stmt_execute($stmt); -/* ステートメントを閉じます */ -mysqli_stmt_close($stmt); - -/* myCity からすべての行を取得します */ +/* myCity テーブルから全ての行を取得します */ $query = "SELECT Name, CountryCode, District FROM myCity"; -if ($result = mysqli_query($link, $query)) { - while ($row = mysqli_fetch_row($result)) { - printf("%s (%s,%s)\n", $row[0], $row[1], $row[2]); - } - /* 結果セットを開放します */ - mysqli_free_result($result); +$result = mysqli_query($link, $query); +while ($row = mysqli_fetch_row($result)) { + printf("%s (%s,%s)\n", $row[0], $row[1], $row[2]); } /* テーブルを削除します */ mysqli_query($link, "DROP TABLE myCity"); - -/* 接続を閉じます */ -mysqli_close($link); -?> ]]> </programlisting> &examples.outputs; diff --git a/reference/mysqli/mysqli_stmt/prepare.xml b/reference/mysqli/mysqli_stmt/prepare.xml index 30a4944a69..5f947c7be9 100644 --- a/reference/mysqli/mysqli_stmt/prepare.xml +++ b/reference/mysqli/mysqli_stmt/prepare.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> -<!-- EN-Revision: ac2f69b3d07ae6a4e89a742918b01881b7381bf4 Maintainer: takagi Status: ready --> +<!-- EN-Revision: 0a4dd74391b71c6837685b1864c9d5142c2725ee Maintainer: takagi Status: ready --> <!-- Credits: mumumu --> <refentry xml:id="mysqli-stmt.prepare" xmlns="http://docbook.org/ns/docbook"> <refnamediv> @@ -13,7 +13,7 @@ &reftitle.description; <para>&style.oop;</para> <methodsynopsis role="oop"> - <modifier>public</modifier> <type>mixed</type><methodname>mysqli_stmt::prepare</methodname> + <modifier>public</modifier> <type>bool</type><methodname>mysqli_stmt::prepare</methodname> <methodparam><type>string</type><parameter>query</parameter></methodparam> </methodsynopsis> <para>&style.procedural;</para> @@ -23,12 +23,15 @@ <methodparam><type>string</type><parameter>query</parameter></methodparam> </methodsynopsis> <para> - null で終わる文字列で指定した SQL クエリを準備します。 + 実行する前にSQL文を準備します。 + 指定するクエリは、単一のSQL文でなければいけません。 </para> <para> - パラメータマーカは、ステートメントの実行や行の取得の前に - <function>mysqli_stmt_bind_param</function> - や <function>mysqli_stmt_bind_result</function> を使用して + SQL文のテンプレートには、ゼロ個以上のパラメータマーカ + (<literal>?</literal>) を含めることができます。 + パラメータマーカは、プレースホルダとも呼ばれています。 + パラメータマーカは、ステートメントを実行する前に + <function>mysqli_stmt_bind_param</function> を使用して アプリケーション変数にバインドする必要があります。 </para> <note> @@ -77,30 +80,21 @@ クエリを表す文字列。単一の SQL 文で構成されている必要があります。 </para> <para> - ひとつまたは複数のパラメータを SQL 文に含めることができます。 - そのためには、適切な位置にクエスチョンマーク - (<literal>?</literal>) を埋め込みます。 + SQL文には、適切な位置にゼロ個以上のパラメータマーカを含めることができます。 + パラメータマーカは、クエスチョンマーク(<literal>?</literal>)で表します。 </para> <note> <para> - ステートメントの最後にセミコロンや <literal>\g</literal> - を追加してはいけません。 - </para> - </note> - <note> - <para> パラメータのマーカは、それが SQL 文の適切な位置にある場合のみ 有効です。例えば INSERT 文の VALUES() リストの中 (行に登録するカラム値を指定する) や - WHERE 句で列のデータと比較する値などが適切な位置の例です。 + <literal>WHERE</literal> 句で列のデータと比較する値などが適切な位置の例です。 </para> <para> しかし、識別子 (テーブルやカラムの名前) や SELECT 文で選択する 項目の名前に指定したり、(等号 <literal>=</literal> のような) 二項演算子の両側にパラメータを指定したりすることはできません。 後者の制限は、パラメータの型が判断できなくなることによるものです。 - また、パラメータのマーカを <literal>NULL</literal> と比較して - <literal>? IS NULL</literal> のようにすることもできません。 一般に、パラメータが使用可能なのはデータ操作言語 (DML) ステートメントであり、データ定義言語 (DDL) ステートメントでは 使用できません。 @@ -122,88 +116,65 @@ <refsect1 role="examples"> &reftitle.examples; <example> - <title>&style.oop;</title> + <title><methodname>mysqli_stmt::prepare</methodname> の例</title> + <para>&style.oop;</para> <programlisting role="php"> <![CDATA[ <?php -$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); -/* 接続状況をチェックします */ -if (mysqli_connect_errno()) { - printf("Connect failed: %s\n", mysqli_connect_error()); - exit(); -} +mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); +$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); $city = "Amersfoort"; /* プリペアドステートメントを作成します */ -$stmt = $mysqli->stmt_init(); -if ($stmt->prepare("SELECT District FROM City WHERE Name=?")) { +$stmt = $mysqli->stmt_init(); +$stmt->prepare("SELECT District FROM City WHERE Name=?"); - /* マーカにパラメータをバインドします */ - $stmt->bind_param("s", $city); +/* マーカにパラメータをバインドします */ +$stmt->bind_param("s", $city); - /* クエリを実行します */ - $stmt->execute(); +/* クエリを実行します */ +$stmt->execute(); - /* 結果変数をバインドします */ - $stmt->bind_result($district); +/* 結果変数をバインドします */ +$stmt->bind_result($district); - /* 値を取得します */ - $stmt->fetch(); +/* 値を取得します */ +$stmt->fetch(); - printf("%s is in district %s\n", $city, $district); - - /* ステートメントを閉じます */ - $stmt->close(); -} - -/* 接続を閉じます */ -$mysqli->close(); -?> +printf("%s is in district %s\n", $city, $district); ]]> </programlisting> </example> <example> - <title>&style.procedural;</title> + <para>&style.procedural;</para> <programlisting role="php"> <![CDATA[ <?php -$link = mysqli_connect("localhost", "my_user", "my_password", "world"); -/* 接続状況をチェックします */ -if (mysqli_connect_errno()) { - printf("Connect failed: %s\n", mysqli_connect_error()); - exit(); -} +mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); +$link = mysqli_connect("localhost", "my_user", "my_password", "world"); $city = "Amersfoort"; /* プリペアドステートメントを作成します */ $stmt = mysqli_stmt_init($link); -if (mysqli_stmt_prepare($stmt, 'SELECT District FROM City WHERE Name=?')) { - - /* マーカにパラメータをバインドします */ - mysqli_stmt_bind_param($stmt, "s", $city); - - /* クエリを実行します */ - mysqli_stmt_execute($stmt); +mysqli_stmt_prepare($stmt, "SELECT District FROM City WHERE Name=?"); - /* 結果変数をバインドします */ - mysqli_stmt_bind_result($stmt, $district); +/* マーカにパラメータをバインドします */ +mysqli_stmt_bind_param($stmt, "s", $city); - /* 値を取得します */ - mysqli_stmt_fetch($stmt); +/* クエリを実行します */ +mysqli_stmt_execute($stmt); - printf("%s is in district %s\n", $city, $district); +/* 結果変数をバインドします */ +mysqli_stmt_bind_result($stmt, $district); - /* ステートメントを閉じます */ - mysqli_stmt_close($stmt); -} +/* 値を取得します */ +mysqli_stmt_fetch($stmt); -/* 接続を閉じます */ -mysqli_close($link); -?> +printf("%s is in district %s\n", $city, $district); ]]> </programlisting> &examples.outputs;